接口和抽象类
抽象类和接口都是Java中用于实现多态的机制,它们的相同点和不同点如下:
相同点:
- 都不能被实例化,只能被继承或者实现。
- 都可以包含抽象方法,子类或者实现类必须实现这些抽象方法。
- 都可以被用于实现多态。
不同点:
- 抽象类可以包含非抽象方法,而接口只能包含抽象方法。
- 子类只能继承一个抽象类,但是可以实现多个接口。
- 抽象类的方法可以有访问修饰符,而接口的方法默认为public。
- 接口可以包含常量,而抽象类不能。
- 接口可以被用于定义类型,而抽象类不能。
- 接口的成员变量默认为public static final,而抽象类的成员变量可以有不同的访问修饰符。
在 Java 中,一个抽象类实现一个接口时,可以选择只实现接口中的一部分方法。但是,如果这个抽象类不是抽象的,那么它必须实现接口中的所有方法。
如果一个抽象类只实现了接口中的一部分方法,那么它必须声明为抽象类。这是因为如果一个类没有实现接口中的所有方法,那么它就不能被实例化,因为无法保证它的所有方法都得到了实现。
需要注意的是,实现接口的抽象类中的未实现方法可以在子类中实现。这意味着如果一个抽象类只实现了接口中的一部分方法,那么它的子类必须实现未实现的方法,否则它也必须被声明为抽象类。