静态方法不能直接调用非静态方法

mon*_*ter 2 java static

根据javatpoint 中写的限制,静态方法不能直接调用非静态方法。“直接”究竟是什么意思,为什么我不能这样做?是的,我可以通过哪些间接方式做到这一点?

T.J*_*der 5

根据javatpoint写的限制,静态方法不能直接调用非静态方法。

他们当然可以。他们只需要一个实例来调用它们。下面是一个静态方法直接调用非静态方法的例子:

class Example {
    public static void main(String[] args) {
        Example e = new Example();
        e.hiThere();     // <========== Direct call to instance method
        go(e);
    }
    private static void go(Example e) {
        e.hiThere();     // <========== Direct call to instance method
    }
    private void hiThere() {
        System.out.println("Hi there");
    }
}
Run Code Online (Sandbox Code Playgroud)

“直接”究竟是什么意思,为什么我不能这样做?

他们的意思可能是“不使用实例”。这根本不是我定义“直接”的方式。例如,在上面的例子中,main没有hiThere实例调用就不能调用。但是一旦它有了一个实例(在main's 的情况下,通过创建一个),它就可以直接调用hiThere它。同样在例子中,go可以直接调用hiThere;它接收一个实例作为参数。

是的,我可以通过哪些间接方式做到这一点?

它们不是间接的:您需要一个实例来调用方法。但是当一个静态方法有一个实例时,调用实例方法就像调用任何其他方法一样直接。