Java覆盖继承

ama*_*mal 3 java inheritance overriding

我在这里可以理解'a1'对于一个以'a = 200'为属性的B类对象.因此,我预计程序将打印200.但为什么这个程序打印100而不是200?

    class A{
        int a=100;
    }

    class B extends A{
        int a=200;

    }

    class Demo{
        public static void main(String args[]){
            A a1=new B(); 
            System.out.println("a : "+a1.a); //Prints 100  
        }
    }
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 9

通过在类B中声明与其父类中的字段具有相同名称的字段A,您基本上隐藏了该字段.但是,变量的字段访问是基于该变量的声明/静态类型完成的.

换句话说,字段不是像方法那样的多态实体.

在这种情况下,变量a1声明为type A.因此,访问的字段将是父类中的字段A.