abstract
可以修饰 类 与 方法。
抽象类:
- 不能被实例化
- 一定包含构造器,以便子类实例化时的调用
抽象方法:
- 抽象方法只有方法的声明,没有方法体。
- 抽象类不一定包含抽象方法,但是抽象方法只会存在于抽象类中。
- 若子类没有重写父类的抽象方法,则子类也是抽象类。
注意点
abstract 不能用于修饰 属性,构造器等结构。
abstract不能用于修饰私有方法、静态方法(不能重写)、final方法以及final类。
Interface
JDK7之前:只能定义全局常量(静态的)和抽象方法;
JDK8:可以额外定义 静态方法与默认方法;
JDK9:可以定义私有方法。
注意点
接口不能定义构造器,不能被实例化;
接口的实际使用体现了多态性,其可以看做是一种规范。
抽象类与接口
内容源自Sakura大佬的总结:
-
接口可以继承接口,抽象类不可以继承接口,但可以实现接口。
-
抽象类可以继承实体类。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
-
抽象类可以继承实体类,就是因为抽象类的可以继承性和有方法。
-
一个接口可以继承多个接口. interface C extends A, B {}是可以的. 一个类可以实现多个接口: class D implements A,B,C{} 但是一个类只能继承一个类,不能继承多个类 class B extends A{} 在继承类的同时,也可以实现接口: class E extends D implements A,B,C{} 这也正是选择用接口而不是抽象类的原因。