接口VS抽象类,使用场景

212 阅读1分钟

1、抽象类:

特点: 不可实例化、可以有普通方法和抽象方法,普通方法有实现,抽象方法没有实现,当子类继承父类时就必须实现父类的抽象方法。

抽象类表示的是一种"is"的关系,比如说华为手机是手机,作为基类(父类)供子类继承,侧重于代码复用。

2、接口:

特点: 不可实例化、只可声明普通方法,无方法体;可以有default和static方法,有方法体。

接口表示的是一种"has"的关系,表示对象具备哪些行为或者需要遵守哪些协议,侧重于解耦。比如我们经常说面向接口编程,其实就是为了解耦,将来需要更换实现类的时候,上层可以做到无感知,保持上层代码不变的前提下替换成新的实现。

总之,侧重于代码复用,就用抽象类,侧重于解耦,就用接口。ps:在继承父类时要注意继承的层次,层次太多阅读起来是一种痛苦。不如就使用组合的方式去实现代码复用。