gpt4 book ai didi

java - 在java 8中,为什么无法调用当前类正在实现的接口(interface)静态方法

转载 作者:行者123 更新时间:2023-12-02 19:29:38 24 4
gpt4 key购买 nike

我最近正在研究 Java 8 的新功能,并观察到一个有趣的行为:

没关系:

Class A { static void staticMethodInA() {println();} }
Class B extends A {}

B.staticMethodInA();
<小时/>

这会导致错误:仅在包含接口(interface)类时可以调用静态方法

interface A { static void staticMethodInA() {println();} }
Class B implements A {}

B.staticMethodInA(); // from here IntelliJ complaints..

有人可以告诉我为什么 Java 8 的设计者可能会选择以不同的方式对待上述两种情况吗?

最佳答案

在 Java 8 接口(interface)中添加静态方法有 1 个限制 - 这些方法不能被实现它的类继承。这是有道理的,因为一个类可以实现多个接口(interface)。如果两个接口(interface)具有相同的static方法,那么它们都会被继承,编译器将不知道要调用哪一个。

但是,通过扩展类,这不是问题。 静态类方法由子类继承。

参见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.

关于java - 在java 8中,为什么无法调用当前类正在实现的接口(interface)静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29383083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com