抽象类和接口的对比:
抽象类 | 接口 | |
默认的方法实现 | 可以拥有默认的方法实现 | 接口完全是抽象的,不存在方法的实现 |
实现 | 子类使用extends关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。 | 子类使用关键字implements来实现接口。它需要提供接口中所有声明的方法的实现 |
构造方法 | 可以有构造方法 | 不能有构造方法 |
和普通类的区别 | 只是抽象类不能实例化 | 不能实例化,和普通类也完全不同 |
访问修饰符 | 可以用public、protected、default | 只能是public |
main方法 | 可以拥有main方法,并且可以运行 | 不可以有main方法 |
继承 | 一个类只能继承一个抽象类、可以实现多个接口 | 一个接口可以继承多个父接口,但是不能继承抽象类 |
普通成员变量 | 可以拥有 | 不可以拥有普通成员变量 |
静态方法 | 可以拥有 | 不可以拥有 |
普通方法 | 可以拥有 | 不可以拥有 |
使用场景:
- 优先使用接口
- 接口用于规范,抽象类用于共性
- 如果需要实现多继承,就应该使用接口。