根据javatpoint 中写的限制,静态方法不能直接调用非静态方法。“直接”究竟是什么意思,为什么我不能这样做?是的,我可以通过哪些间接方式做到这一点?
根据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;它接收一个实例作为参数。
是的,我可以通过哪些间接方式做到这一点?
它们不是间接的:您需要一个实例来调用方法。但是当一个静态方法有一个实例时,调用实例方法就像调用任何其他方法一样直接。