接口与抽象类的异同
接口与抽象类的关系
-
相同点
- 都不能被实例化
- 实现接口的类或继承抽象类的子类都要实现其全部方法后才可实例化
-
不同点
-
继承
- 接口与接口之间可以继承,并且可以多继承,同时Java类可以实现多个接口
- 抽象类则为单继承
-
成员
-
接口:JDK 7 : 只能定义全局常量(public static final )和抽象方法(public abstract),可省略不写
JDK 8 : 除了定义全局常量和抽象方法外,还可以定义静态方法、默认方法(default)
-
抽象类中成员变量默认default,可在子类中被重新定义,也可被重新赋值。
-
-
构造器
- 接口: 接口中不能定义构造器,意味着接口不能实例化
- 抽象类中一定有构造器,便于子类实例化时使用
-
修饰
- abstract: 可以用来修饰的结构: 类、方法
- 而接口和类是并列的两个结构
-
实例化
- 如果实现类覆盖了接口中的所有抽象方法,则此类就可以实例化
- 如果实现类没有覆盖了抽象类中的所有抽象方法,则此类就仍为一个抽象类,反之,可以实例化
-
理念
- 接口,实际上就是一种规范,强调特定功能的实现
- 而继承抽象类强调一种从属关系。
-