与类级别和实例级别混淆

Gur*_*lki 3 java

我有以下课程:

public class B {

    public void print() {
    }

    public static void main(String[] args) {
        B B = new B();
        B.print();
    }

}
Run Code Online (Sandbox Code Playgroud)

我想知道为什么编译器没有给出错误说它不是静态方法.当我们将对象与类相同时,它将如何区分类级别和实例级别?

Boz*_*zho 5

因为您正在访问类的实例上的方法.顺便提一下,实例的名称与类名相同,但由于您没有具有此名称的静态方法,因此编译器假定正确 - 即实例方法.

如果你定义了方法static,那么它将再次假设唯一可能的事情 - staticB类上调用一个方法,因为实例没有这样的方法.

最终,您不能同时拥有同名static的非static方法和非方法.