In java 8, why cannot call the interface static method that the current class is implementing
本问题已经有最佳答案,请猛点这里访问。
我最近在玩Java 8的新特性,观察到一个有趣的行为:
这没关系:
1 2 3 4 | Class A { static void staticMethodInA() {println();} } Class B extends A {} B.staticMethodInA(); |
这将导致以下错误:只能对包含接口类调用静态方法。
1 2 3 4 | interface A { static void staticMethodInA() {println();} } Class B implements A {} B.staticMethodInA(); // from here IntelliJ complaints.. |
有人能告诉我为什么JavaJavaDesigner 5月8日选择对上述2种情况进行不同的处理吗?
在Java 8中接口中添加EDCOX1 0个方法产生了1个限制——这些方法不能被实现它的类继承。这是有意义的,因为类可以实现多个接口。如果两个接口有相同的
但是,对于扩展类,这不是问题。
见JLS§;8.4.8:
A class C inherits from its direct superclass all concrete methods m (both static and instance) of the superclass
...
A class C inherits from its direct superclass and direct superinterfaces all abstract and default (§9.4) methods m
...
A class does not inherit static methods from its superinterfaces.