抽象类和接口

抽象类和接口

抽象类

-1. 在多态中,父类方法的方法体是多余的
因为实际调用时实际为子类的方法,父类的方法体并不会被执行。

  • 2: 一个方法没有方法体则该方法为抽象方法

  • 3:一如果个类中如果有抽象方法则这个类一定是抽象类

  • 4:如果父类有抽象方法,则子类需实现父类所有的抽象方法,否则该类必须为抽象类

  • 5: 抽象类不能创建对象,但是可以有构造方法。但是因为抽象类不能创建对象, 所以只能在其被子类实现后才可调用

抽象类和接口
!The type Whale must implement the inherited abstract method Mammal.move(),提示你补全未实现的方法,若不补全则,子类也定义为抽象类才可

抽象类和接口

抽象类和接口

图3中抽象类Whale在 LittleWhale中被实现了,因此可以在该类(该类不是抽象类,可以创建对象从而调用构造方法)中调用抽象类Whale中的构造方法。

  • 6:一个抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类
    -抽象类和接口
  • 抽象类与普通类区别:
    a.抽象类有abstract修饰
    b.抽象类不能创建对象,普通类可以
    c.抽象类可以有抽象方法,普通类一定没有抽象方法。
  • 8 :抽象类不能用final修饰,如果一个抽象类被final修饰,则次方法一定不可能被实现。所以这在原则上是不可以的
  • 9 :抽象方法不能用final修饰,原因同上,会不能被重写既永远无法实现。

接口

  • 1.如果一个源文件中的方法全是抽象方法,则可以定义为接口用interface修饰词
    在JDK8中新增了
    抽象类和接口

  • 2 .接口没有构造方法
    抽象类和接口

  • 3 .接口中的抽象方法默认为public abstract,因此可以忽略
    抽象类和接口

  • 4 .一个接口可以继承多个其他接口
    抽象类和接口

  • 5 .规范:接口名以开开头

  • 6 .接口中变量默认是public static final,即默认为默认静态常量

抽象类和接口如果AGE为常量,则不可以被2次赋值,得证

  • 7 .接口的继承称之为implements(意思为实现某个接口的意思)

抽象类和接口

  • 8.实现类 实现接口的同时可以继承接口中的常量
    抽象类和接口
    修改为抽象类后不报错
    抽象类和接口
  • 9 .一个类如果不实现接口中所有方法则该类必须为抽象类
    抽象类和接口
  • 10 .一个类可以实现多个接口

抽象类和接口
此处添加的List为系统已有的一个接口,通过ctrl shift o引包,这里实现了一个类实现多个接口

接口中的默认方法和静态方法

1.一个类如果没有实现接口中所有方法,则该类必须为抽象类
2.接口中不能定义具体方法
抽象类和接口

3.JDK7及其以前JDK版本不能声明具体方法,但是从JDK8包括其以后版本可以有具体的方法,但必须为static /default修饰
抽象类和接口
4.如果一个实现类方法实现了两个接口,且这两个接口各自定义了一个名字相同的常量AGE
则在实现类调用AGE时,必须声明调用的是哪个类的变量,因为接口中定义的变量默认为 public static final,所以为静态变量,可以用类名.属性来指定。

抽象类和接口

5.函数式接口,如果一个接口中只有一个抽象方法(可以有定义常量,也可以有其他默认方法和静态方法)则该方法可以定义为函数式接口
抽象类和接口

抽象类和接口都是多态的一种