2011-03-21 28 views
1
Duck d = new Duck(); 
string[] s = {}; 
d.main(); 

クラス名ではなく参照変数を使用して静的メソッドを呼び出そうとすると、コンパイラでエラーが発生しますか?参照変数を使用した静的メソッド呼び出し

+1

これらの質問はわかりません。自分でそれを試してみるのはどれくらい難しいですか?そうすれば、すぐに正しい答えが得られます。この方法では、まったく答えが得られない場合があります。また、誤った答えもいくつか表示されることがあります。 – EJP

答えて

1

コンパイラの設定によって異なります。 eclipseのデフォルト設定では、たとえば、警告が生成されます。

コンパイラの設定で試してみてください。 (JLSによって定義されるような)

一般に、参照を介して静的メソッドを呼び出すことJLSによって定義されるよう

+3

いいえ、この質問には決定的な答えがあります。コンパイラは警告に関して異なることが許されますが、Javaコンパイラと呼ばれるときには、すべて同じ入力プログラムのセットを受け入れる必要があります。 – jmg

+0

@jmg - よく、警告/エラー設定を確認してください。これをエラーに設定することができます。したがって、彼のコンパイラが異なって設定されていると、エラーが発生します。 – Bozho

+2

@Bozho:それでも、それはJLSによって明確に定義されていて、Eclipseでは有効なJavaプログラムではありません。 – jmg

5

それが正当なJavaでエラーを生成しません。しかし、それは多くのコーディング標準で眉をひそめる。したがって、一部のコンパイラや一部のIDEでは、警告が出されています。

1

標準コンパイラを使用している場合、それはできません。

しかし、それはすべきです。

このように静的メソッドを呼び出すべきではありません。そうすることで何か価値は全くありません。それは速くて読みやすいものではありませんが、時の刻みを刻むことです。

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()方法がここに呼ばれていますか?

関連する問題