一个类中有一个或多个抽象方法,那他就是抽象类
Java8以前,接口里面都是抽象方法
单纯从代码上看,这是最简单的分辨方式了。
接口被设计成为like-A,而抽象类则是is-A,
因此接口是可以多继承的。 接口被用来建立类之间的协议,接口可以包含属性(被隐式指定为static和final) ,Java8以后,default关键字让接口可以拥有方法
看起来抽象类和接口又混合成为一个东西了
区别
| 特性 | 接口 | 抽象类 |
|---|---|---|
| 继承 | 多继承 | 单继承 |
| 状态 | 不包含属性 | 可以包含属性,类中非抽象方法可以用这些属性 |
| 默认方法和抽象方法 | 不需要子类中重复实现默认方法,默认方法可以引用其他接口方法 | 必须在子类中实现抽象方法 |
| 构造器 | 无构造器 | 有构造器也不能实例化 |
| 可见性 | 隐性public | 可以是protected或者友元 |
如果我们将一个抽象的方法理解成接口,似乎就能更好地理解两者的关系,抽象类是接口和其他方法的组合(不是)
多继承带来的问题——方法重名
这个问题可以通过重写重新设计方法或者指定某个方法来解决
methid(){
Interface2.super.method();
}
本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情。