Duck d = new Duck();
string[] s = {};
d.main();
クラス名ではなく参照変数を使用して静的メソッドを呼び出そうとすると、コンパイラでエラーが発生しますか?参照変数を使用した静的メソッド呼び出し
Duck d = new Duck();
string[] s = {};
d.main();
クラス名ではなく参照変数を使用して静的メソッドを呼び出そうとすると、コンパイラでエラーが発生しますか?参照変数を使用した静的メソッド呼び出し
コンパイラの設定によって異なります。 eclipseのデフォルト設定では、たとえば、警告が生成されます。
コンパイラの設定で試してみてください。 (JLSによって定義されるような)
一般に、参照を介して静的メソッドを呼び出すことJLSによって定義されるよう
それが正当なJavaでエラーを生成しません。しかし、それは多くのコーディング標準で眉をひそめる。したがって、一部のコンパイラや一部のIDEでは、警告が出されています。
標準コンパイラを使用している場合、それはできません。
しかし、それはすべきです。
このように静的メソッドを呼び出すべきではありません。そうすることで何か価値は全くありません。それは速くて読みやすいものではありませんが、時の刻みを刻むことです。
class A {
static void bar() {
System.out.println("A");
}
}
class B extends A {
static void bar() {
System.out.println("B");
}
}
次にどこかのコードで、あなたがこれを行う:このシナリオを考え今
A foo = new B();
foo.bar();
を、どのbar()
方法がここに呼ばれていますか?
これらの質問はわかりません。自分でそれを試してみるのはどれくらい難しいですか?そうすれば、すぐに正しい答えが得られます。この方法では、まったく答えが得られない場合があります。また、誤った答えもいくつか表示されることがあります。 – EJP