父类和实现接口中具有相同名称的静态和非静态方法

Ara*_* KT 8 java inheritance static-methods

我不是在询问界面和抽象类之间的区别.

它是单独的成功,对吗?

interface Inter {
    public void fun();
}

abstract class Am {
    public static void fun() {
        System.out.println("Abc");
    }
}

public class Ov extends Am implements Inter {
    public static void main(String[] args) {
        Am.fun();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生冲突?

CKi*_*ing 14

A static和非static方法不能在同一个名称中使用相同的名称class.这是因为您可以使用引用访问a static和非static方法,并且编译器将无法决定您是要调用static方法还是非static方法.

例如,请考虑以下代码:

Ov ov = new Ov();
ov.fun(); //compiler doesn't know whether to call the static or the non static fun method.
Run Code Online (Sandbox Code Playgroud)

Java可能允许static使用引用调用方法的原因是允许开发人员无缝地将static方法更改为非static方法.

  • 这不是 100% 正确:您**可以**为成员方法和静态方法使用相同的名称,前提是它们遵循相同的重载规则,这意味着签名至少在参数类型上应该不同。 (3认同)