接口与抽象类


抽象类和抽象方法都用abstract修饰,抽象类不能被实例化,只能被继承。

jdk8之前,接口可以看作特殊的抽象类。是一个完全抽象的类。

jdk8,接口可以拥有默认的方法实现,因为不支持默认方法的接口维护成本太高了。接口添加新的方法,其他实现了这个接口的类都需要实现新增的方法。

接口的成员(字段和方法)默认都是public(抽象类没有限制),不允许其他。从jdk9开始允许方法定义为private,这样可以定义某些复用代码,又不会把方法暴露出去。

接口的字段默认是static和final的。
抽象类没有限制。

1. 比较
从设计上,抽象类关系is-a需要满足里氏替换原则,子类必须能完全替代父类。

接口关系是like-a,提供一种方法的契约。

2.选择
很多时候接口优先于抽象类,因为接口没有抽象类严格的类层级要求,可以灵活的为一个类添加新的行为。并且Java8开始,接口允许默认的方法实现,使得修改接口的成本变的很低。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务