2016-08-15 95 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); 
} 
} 

为什么输出是“A1B2”而不是“A1B1”?字段不能被覆盖,而且静态字段不能?java覆盖静态字段

+2

你不重写任何东西 - 你**隐藏**字段。 –

+0

“隐藏”可以用静态字段来完成吗? – avivlevi

+0

隐藏和重写有什么区别? – avivlevi

回答

0

看来你对Overriding的概念感到困惑。

在Java中,就类变量而言,您不会覆盖它们,您将它们隐藏起来。

覆盖是例如方法。隐藏是例如变量。

隐藏和重写都不同。

+1

+1只是因为这个答案是完全正确的,可能只有被问题作者投了-1,因为他不明白或者想要听到答案...... – Alfi