2016-08-15 5 views
-1
public class A { 
     public String s="A"; 
     public static int i=1; 
    } 
public class B extends A { 
     public String s="B"; 
     public static int i=2; 
public static void main(String [] args) { 
       A a= new B(); 
       B b= new B(); 
       System.out.print(a.s+a.i); 
       System.out.print(b.s+b.i); 
} 
} 

出力が "A1B1"ではなく "A1B2"であるのはなぜですか?フィールドはオーバーライドできませんし、静的フィールドもオーバーライドできません。javaは静的フィールドをオーバーライドします

+2

あなたは何も上書きしていません - あなたは**フィールドを隠しています。 –

+0

静的フィールドで「隠蔽」を行うことはできますか? – avivlevi

+0

隠しと上書きの違いは何ですか? – avivlevi

答えて

0

オーバーライドの概念と混同しているようです。

Javaの場合、クラス変数に関する限り、それらを上書きしないで非表示にします。

オーバーライドは、たとえばメソッドです。非表示はインスタンス変数です。

非表示と上書きの両方が異なります。

+1

+1この答えは完全に正しいので、質問者が答えを聞くことを理解していない、または聞きたいと思っていないため、おそらく質問者が-1と投票しました。 – Alfi

関連する問題