1、抽象类:
特点: 不可实例化、可以有普通方法和抽象方法,普通方法有实现,抽象方法没有实现,当子类继承父类时就必须实现父类的抽象方法。
抽象类表示的是一种"is"的关系,比如说华为手机是手机,作为基类(父类)供子类继承,侧重于代码复用。
2、接口:
特点: 不可实例化、只可声明普通方法,无方法体;可以有default和static方法,有方法体。
接口表示的是一种"has"的关系,表示对象具备哪些行为或者需要遵守哪些协议,侧重于解耦。比如我们经常说面向接口编程,其实就是为了解耦,将来需要更换实现类的时候,上层可以做到无感知,保持上层代码不变的前提下替换成新的实现。
总之,侧重于代码复用,就用抽象类,侧重于解耦,就用接口。ps:在继承父类时要注意继承的层次,层次太多阅读起来是一种痛苦。不如就使用组合的方式去实现代码复用。