2012-01-11 8 views
10

さまざまなJavaブックやチュートリアルから読んだように、インターフェイスで宣言された変数は定数であり、上書きすることはできません。インタフェースの変数をオーバーライドしますか?

私はそれ

interface A_INTERFACE 
{ 
    int var=100; 
} 

class A_CLASS implements A_INTERFACE 
{ 
    int var=99; 
    //test 
    void printx() 
    { 
     System.out.println("var = " + var); 
    } 
} 

class hello 
{ 

    public static void main(String[] args) 
    { 
     new A_CLASS().printx(); 
    } 
} 

をテストするための簡単なコードを作って、それが VARをプリントアウト= 99

は、VARが上書きされますか?私は全く混乱している。ご意見ありがとうございます!


大変ありがとうございます。私はこのインターフェースの事柄についてかなり新しいです。これを理解するためには、「影」がキーワードです。私は関連資料を探して、今理解しています。インタフェースにおける任意の変数のための

+0

。 –

答えて

11

インターフェイスの定数も静的であるため、オーバーライドされずにシャドーイングされ、さらに混乱します。

はこれを試してみてください:

A_INTERFACE o = new A_CLASS(); 
System.out.println(o.var); 

あなたは非静的な方法で静的フィールドへのアクセスについてのコンパイル時の警告を取得する必要があります。

あなたは、変数、メソッドのみを「上書き」していない

そして今、この

A_CLASS o = new A_CLASS(); 
System.out.println(o.var); 
System.out.println(A_INTERFACE.var); // bad name, btw since it is const 
4

デフォルトの署名が

public static final ... 

だからあなたはとにかくそれをオーバーライドすることはできませんです。

0

そのインターフェイスで宣言した変数は、それを実装したクラスからは見えません。

変数を静的変数、最終変数、つまり定数で宣言すると、それは実装者が見ることができます。

+2

'static 'と' final'と 'public'です(' interface'のおかげで) – Thilo

10

変数をオーバーライドしませんでした。は、より具体的なスコープで宣言された新しいインスタンス変数でにシャドーされています。これはあなたのprintxメソッドで印刷された変数です。

関連する問題