我是个刚接触JAVA的新手,下面这段代码的打印结果是10,为什么不是20呢? 
class A 

int x=10; 

class B extends A 

int x=20; 

class Test 

public static void main(String []args) 

B b=new B(); 
    A a=b; 
System.out.println(a.x); 

}

解决方案 »

  1.   

    属性x并没有在继承中覆盖父类属性
    事实上,你的属性x在对象中有两个实例,你把B类的实例向上转型成了A类型,然后取属性,会取A类型所属的x而不是B的
    你可以试着用B类调用A类的属性,like this:class A {
    int x = 10;
    }class B extends A {
    int x = 20;
    void printX(){
    System.out.println(super.x);
    }
    }public class TestTest {
    public static void main(String[] args) {
    B b = new B();
    A a = b;
    System.out.println(b.x);//20
    b.printX();//10
    }
    }
      

  2.   

    明白了
    override是对方法而言,static,private,final方法出外 
    对于变量,没有override一说,它们的行为成为hiden