以下是JLS定义方法继承的方式:
C类继承自其直接超类和直接超接口所有抽象和默认(§9.4)方法m,其中所有以下都是真的:m是直接超类的成员或直接超接口D,C . m使用与C相同的包中的包访问是公共的,受保护的或声明的 . 在C中声明的方法没有签名,该签名是m的签名的子签名(第8.4.2节) . C从其直接超类继承的具体方法没有签名,该签名是m的签名的子签名 . 没有方法m'是直接超类的成员或直接超接口D'的C(m不同于m',D不同于D'),因此来自D'的m'优先于方法
第四颗子弹对我来说并不清楚 . 甚至不可能在同一个类中声明抽象和非抽象方法 . 难道你不能解释这条规则到底是什么意思吗?
2 回答
C可以从其直接超类和它实现的接口继承方法(在Java 8中,它甚至可以从接口继承默认实现) .
假设
C
扩展B
并实现I
.B包含一种方法:
我包含一个方法(可能有默认实现):
第4个子弹意味着由于
B
的m
方法的存在,C
将不会继承I
的m
方法 .C
只会继承B
的m
方法 .如果你看similar section in the JLS for Java 7:
您会注意到没有类似的语言,如果有问题的子弹被添加到Java 8中引入的默认接口方法,这是有意义的 .
这意味着您继承了自己不会覆盖的超类中的所有方法 .
什么?