抽象类和接口
抽象类和接口
抽象类
-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.函数式接口,如果一个接口中只有一个抽象方法(可以有定义常量,也可以有其他默认方法和静态方法)则该方法可以定义为函数式接口
三
抽象类和接口都是多态的一种