1.区别
接口
a 因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但可以实现多个接口,接口本身也可以继承多个接口。
b 接口里面的成员变量默认都是public static final类型的。必须被显示的初始化。
c 接口里面的方法默认都是public abstract类型的。隐式声明。
d 接口没有构造方法,不能被实例化。
e 接口不能实现另一个接口,但可以继承多个接口。
f 类如果实现了一个接口,那么必须实现接口里面的所有抽象方法,否则类要被定义为抽象类
抽象类
a 如果将一个类声明为abstract,此类不能生成对象,只能被继承使用。
b 抽象方法必须存在于抽象类中。
c 抽象类中可以有一般的变量和一般的方法。
d 子类继承抽象类必须实现其中抽象方法,除非子类为抽象类。
private void print(){};此语句表示方法的空实现。
abstract void print(); 此语句表示方法的抽象,无实现
区别:按照类从上到下 存在的内容进行比对
区别类目 | 抽象类 | 接口 |
abstract | interface | |
集成抽象类的关键字extends | 实现接口的关键字implements | |
集成抽象类只能单继承 | 实现接口可以多实现 | |
抽象类存在构造方法 | 接口中不存在构造方法 | |
抽象类中存在成员变量 | 接口中只可以有常量 | |
抽象类可以有成员方法 | 接口中只可以有抽象方法 | |
抽象类增加方法可以不影响子类 | 接口中增加方法通常影响子类 | |
jdk1.8中规定接口中可以出现非抽象方法,但是必须使用default关键字进行修饰 | ||
2.使用场景
a 优先定义接口
b 如果有多个接口实现有公用的部分,则使用抽象类,然后集成它
c 接口是核心,其定义了要做的事情,包含了许多的方法,但没有定义这些方法应该如何做。
d 如果许多类实现了某个接口,那么每个都要用代码实现那些方法
e 如果某一些类的实现有共通之处,则可以抽象出来一个抽象类,让抽象类实现接口的公用的代码,而那些个性化的方法则由各个子类去实现