抽象类与接口的异同.
相同点.
- 都不能实例化
- 都需要类去实现
不同点.
- 接口不能有构造方法,抽象类可以有。
- 一个类可以实现多个接口,一个抽象类只能别一个类继承
- 接口不能有方法体,抽象类可以有。(JDK1.7及以前)
- 接口不能有静态方法,抽象类可以有。(JDK1.7及以前)
- 在接口中凡是变量必须是
public static final
,方法必须是public
,而在抽象类中没有要求。
从 Java 8 开始,接口也可以拥有默认的方法实现,这是因为不支持默认方法的接口的维护成本太高了。在 Java 8 之前,如果一个接口想要添加新的方法,那么要修改所有实现了该接口的类,让它们都实现新增的方法
使用接口:.
- 需要让不相关的类都实现一个方法,例如不相关的类都可以实现 Comparable 接口中的 compareTo() 方法;
- 需要使用多重继承。
使用抽象类:.
- 需要在几个相关的类中共享代码。
- 需要能控制继承来的成员的访问权限,而不是都为 public。
- 需要继承非静态和非常量字段。