接口能否包含带有实现的方法?——对Java文档描述的疑问
关于抽象类与接口特性相似性的解释
Oracle文档核心表述
Oracle文档指出:“抽象类与接口类似,无法实例化,且可包含有无实现的混合方法。但抽象类可声明非静态非final字段,还能定义公共、受保护及私有具体方法……”
疑惑解答
你之前认为“接口仅能包含抽象方法”是Java 8之前的旧规则,从Java 8开始,接口新增了两种带实现的方法:
default默认方法:属于实例方法,带有具体实现,实现类可直接继承或重写static静态方法:属于接口本身的方法,带有具体实现,需通过接口名直接调用
这意味着现在的接口可以同时包含:
- 无实现的抽象方法(传统接口方法)
- 有实现的默认方法、静态方法
而抽象类本身就支持同时包含抽象方法(无实现)和各种访问修饰符的具体方法(有实现),所以文档才会说两者在“可包含有无实现的混合方法”这一特性上类似。
补充两者关键差异:
- 抽象类可声明非静态非final字段,接口的字段默认是
public static final - 抽象类的具体方法可用public、protected、private修饰,接口的默认方法、静态方法只能是public(默认修饰符)
内容的提问来源于stack exchange,提问作者Ell1357
相关产品推荐
相关产品推荐

