JAVA抽象类和接口

系统管理员 2022-05-18 10:56 357阅读 0赞

抽象类:

定义一个类的时候,常常需要定义一些方法来描述该类的行为特征,但有时候这些方法的实现方式无法确定。

针对这种情况,Java允许在定义方法的时候可以不写方法体,不包含方法体的方法称为抽象方法,用关键字abstract修饰。

当一个类中包含了抽象方法,该类就必须声明为抽象类,abstract修饰。

  1. 注意:包含抽象方法的类必须声明为抽象类,但抽象类中可以不包含抽象方法。抽象类是不可以被实例化的。
  2. package day11;
  3. abstract class Animals {
  4. // 抽象类不能实例化,即不能new
  5. String name = "Animals.name";// 成员变量
  6. // abstract String name2;//成员变量不能抽象
  7. public Animals() {
  8. System.out.println("抽象类的构造方法");
  9. }
  10. abstract void d1();// 默认public
  11. // abstract void d9(){}// 抽象类不能带方法体,abstract不能和{}同用
  12. // void d8();// 默认public,不带abstract报错,没有方法体.
  13. void d3() {
  14. };// 默认public非abstract
  15. // final abstract void d7();// abstract不能和final同用
  16. // private abstract void d6();// abstract不能和private同用
  17. protected abstract void d4();// abstract能和protected同用
  18. public abstract void shout();;
  19. // public static abstract void shout2() {}//抽象类abstract不能和static同用
  20. // 抽象类中的成员变量和成员方法非抽象的时候,即不用abstract关键字修饰时,
  21. // 抽象类的继承和普通类的继承是一样的
  22. public void speak() {
  23. System.out.println("抽象类中可以有非抽象方法");
  24. }
  25. public static void ststicMethod() {
  26. System.out.println("抽象类中可以有静态方法");
  27. }
  28. }
  29. class Cat extends Animals {
  30. // 子类(非抽象的子类 )必须实现全部的父抽象类中的抽象方法
  31. public Cat() {
  32. System.out.println("子类的构造方法");
  33. }
  34. @Override
  35. public void shout() {
  36. System.out.println("喵喵喵~");
  37. }
  38. @Override
  39. void d1() {
  40. }
  41. @Override
  42. protected void d4() {
  43. }
  44. }
  45. public class Main {
  46. public static void main(String[] args) {
  47. Cat c1 = new Cat();
  48. c1.shout();// 子类实现的shout()
  49. c1.speak();// 抽象类中的非抽象方法
  50. System.out.println(c1.name);// 抽象类中的成员变量
  51. Animals.ststicMethod();// 抽象类中的静态方法可以通过 抽象类名.方法名()调用
  52. Cat.ststicMethod();// 也可以通过 子类类名.方法名()调用
  53. c1.ststicMethod();
  54. }
  55. }

运行结果:

运行结果

从运行结果分析,抽象类就是一个特殊的类,里面可以写不带方法体的方法了而已,并且抽象方法前面的abstract不能省略,不能和private、final关键字连用,因为抽象类是要被继承重写实现的。

接口:

  1. 如果一个类中的所有方法都是抽象的,则可以将这个类用另外一种方式来定义,即接口。

抽象类中方法默认使用public abstract修饰,即抽象方法。

抽象类中的变量默认使用public static final修饰,即常量。

1.8版本之后,允许接口中存在带方法体的方法,要使用default关键字修饰该方法。

一个非抽象类可以使用implement关键字实现某个接口中的所有方法。

抽象类实现接口的时候,可以只实现部分方法。

一个类在继承另一个类的同时还可以实现接口,此时extends关键字必须位于implement关键字之前。

发表评论

表情:
评论列表 (有 0 条评论,357人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java-接口抽象

    抽象类写法及作用范围 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更通用。 类的设计应该保证父类和子类能够共享特征。有时将一个父类设计得非常抽

    相关 Java 抽象接口

    抽象类 一.抽象类的含义 当多个类中出现相同的功能,但是功能主体不一样,这时候可以进行向上抽取,只抽取功能定义,而不抽取功能主题,并将这些功能定义封装进一个类,,

    相关 JAVA抽象接口

    本文是本人学习网络上各位大牛的总结。 一、抽象类 1. 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。 2. 抽

    相关 Java抽象接口

    抽象类是一种功能不全的类,接口是一个抽象方法声明和静态不能被修改的数据的集合,两者都不能被实例化。从某种意义上说,接口是一种特殊形式的抽象类,在Java语言中,抽象类表示一种继

    相关 java接口抽象

    1、抽象类最大的特征就是在普通类的基础上追加了抽象方法,而事实上抽象类定义里面也存在有若干的问题 。将抽象方法和普通方法写在一起有些乱 。抽象类本身会存在单继承的局限

    相关 JAVA抽象接口

    抽象类: 定义一个类的时候,常常需要定义一些方法来描述该类的行为特征,但有时候这些方法的实现方式无法确定。 针对这种情况,Java允许在定义方法的时候可以不写方法体,不

    相关 Java抽象接口

    父类定义了子类中的共同行为,接口定义不同类的共同行为。 抽象类 抽象类不可 new 一个实例,可以包含抽象方法,没有实现,这些方法在子类中实现。 使用 abstrac