抽象类 VS 接口
1、抽象类:abstract class
抽象类中定义抽象方法,为子类提供一个通用模板。子类需要在抽象类的基础之上进行开发,需要重写抽象类中的抽象方法,在进行自我的扩展。
一个抽象类中包含0~n个抽象方法。子类通过extends
继承来获取父类的方法【包括非抽象方法、抽象方法】,重写所有的抽象方法、重写需要改写的非抽象方法、添加特有的方法。
抽象类不能创建对象,但是抽象类中存在构造器【作用:在子类初始化对象时需要super调用父类构造器】;不能使用final
修饰【final
修饰的类不能被继承】。
2、接口:interface
版本 | 内容 |
---|---|
JDK 8之前 | 常量(public static final)、抽象方法(public abstract) |
JDK 8 | 常量、抽象方法;具有方法体:普通方法(public default)【可以被重写,重写时不能加default 】、静态方法(public static)【不能重写】 |
JDK 9 | 常量、抽象方法、普通方法、静态方法、私有方法(private xxx)【供默认方法或静态方法调用】 |
public interface TestInterface {
int CONSTANT = 10;// public static final
void abstractMethod();// public abstract
default void defaultMethod() {} // public
static void staticMethod(){} // public
private void commonPrivateMethod() {} // default ×
private static void staticStaticMethod() {}
}
特点:
- 类和接口是同一层次的概念;
- 接口中没有构造器;
- 接口不能创建对象【不能new出来,但是可以通过接口指向实现类】;
- 接口方法实现方法回调。
Java只有单继承,也有多实现;先写继承再写实现。