抽象类 | 接口 | |
定义 | 是它的所有子类的公共属性的集合,是包含一个或多个抽象方法的类。抽象类可以看作是对类的进一步抽象 | 抽象方法的集合 |
关键字 | extends、abstract | implements、interface |
继承/实现 | 单继承(实现继承)、可多层继承 | 多实现(接口继承) |
子类与父类之间的关系 | is a | has a |
属性(变量) | 属性创建无特殊规定 | 对于属性,默认用public static final修饰 |
方法体 | 有方法体 | 无方法体(Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法) |
是否能实例化 | 不能 | 不能 |
是否有构造方法 | 有,抽象类不能用构造方法实例化,子类可以通过调用父类的构造方法来初始化父类中的成员变量 | 无 |
子类对于父类属性和方法的使用 | 1、可以直接访问父类中的非私有的属性和方法,可以有自己的属性和方法 2、可以使用super关键字访问父类的属性和方法 3、子类需要重写父类的抽象方法 | 1、可以使用接口中的常量 2、需要重写接口中的所有的抽象方法 |
优点 | 提高了代码的可复用性 | 提高了代码的可扩展性、可维护性 |
缺点 | 提高了代码之间的耦合度,父类改动后会影响所有子类 | 对于实现接口的普通类,必须实现口中的所有抽象方法 |
使用时机 | 是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承 | 需要考虑代码的可扩展性和可维护性时 |
使用语法格式 | [访问符] abstract class ClassName { // 声明变量 // 方法、抽象方法 } | [访问符] interface 接口名称 [extends 其他的接口名] { // 声明变量 // 抽象方法 } |
Java 抽象类和接口
于 2024-07-01 17:57:59 首次发布