java基础 4 继承(1)抽象类与接口的区别
抽象类:
是用来捕捉子类的通用特性的,至少包含一个抽象方法,该抽象方法必须在子类中实现,由于抽象类没有抽象方法的具体实现,因此不能对抽象类进行实例化。
接口:
定义了一组方法,是抽象方法的集合,但是接口都没有方法的实现,也就是说这些方法都是抽象方法。
参数 | 抽象类 | 接口 |
默认的方法实现 | 它可以有默认的方法实现 | 接口是完全抽象的,它根本不存在方法的实现 |
实现 | extends 子类需要重写抽象类中的所有抽象方法 | implements 子类需要实现接口中的所有方法 |
构造器 | 可以有 | 没有 |
与正常java类的区别 | 除了不能实例化抽象类之外,和普通Java类没有任何区别 | 接口是完全不同的类型 |
访问修饰符 | public protected defalut | 只能是public |
main方法 | 可以有并运行 | 没有 |
多继承 | 可以继承一个类和实现多个接口 | 只可以继承一个或多个其他接口 |
速度 | 比接口快 | 它需要时间来寻找在类中实现的方法 |
添加新方法 | 可以提供默认的实现,不需要改变现在的代码 | 必须改变实现该接口的类 |
什么时候使用抽象类和接口
- 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。
- 如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。
- 如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。