抽象类与接口的关系
1. 抽象类和接口的区别
- 类可以实现无限个接口,但只能从一个抽象类继承。
- 抽象类中可以存在并实现非抽象方法,但接口里面的方法只能是public且没有实现的。
- 抽象类的成员变量可以被不同的修饰符来修饰,但接口的成员变量只能是静态常量(static final)。
- 抽象类是对象的抽象,接口是一种行为规范。
2. 抽象类和接口的使用注意事项
- 在继承抽象类时,必须要实现抽象类中所有的抽象方法,且实现的方法必须与抽象方法签名完全一致,这和接口一致。
- 抽象类的非抽象方法具有实际功能时,子类可以不必重写该方法,可以直接引用。当然根据继承的概念也可以重写该方法。
- 而实现(implement)一个接口时,必须要实现接口中所定义的所有方法,不可缺漏一个。
- 在实现接口时,我们也常写一个抽象类,来实现(implement)接口中的某些子类所需的通用方法,接着在编写各个子类时,即可继承该抽象类来使用,省去在每个都要实现通用的方法的困扰。
3. 接口的default`方法(JDK>=1.8)
在接口中,可以定义default
方法。
interface Person {
String getName();
default void run() {
System.out.println(getName() + " run");
}
}
default
方法的目的是,当我们需要给接口新增一个方法时,会涉及到修改全部子类。
如果新增的是default
方法,那么子类就不必全部修改,只需在需要重写的地方去重写新增的方法。