文章目录
抽象类和接口都是 Java 中多态的常见使用方式。
核心区别:
抽象类中可以包含普通方法和普通字段,这样的普通方法和字段可以被子类直接使用(不必重写);
接口中不能包含普通方法,子类必须重写所有的抽象方法。
如之前写的 Animal 例子,此处的 Animal 中包含一个 name 这样的属性, 这个属性在任何子类中都是存在的,因此,此处的Animal 只能作为一个抽象类,而不应该成为一个接口。
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
}
抽象类存在的意义是为了让编译器更好的校验,像 Animal 这样的类我们并不会直接使用,而是使用它的子类。万一不小心创建了 Animal 的实例,编译器会及时提醒我们。