Java子类成员变量覆盖父类成员变量

成员变量覆盖

父类TestA

public class TestA {
    public String name = "A";

    public void out() {
        System.out.println(name);
        System.out.println(this.name);
    }
}

子类 TestB

public class TestB extends TestA {
    private String name;

    @Test
    public void test() {
        this.name = "B";
        System.out.println(name);
        System.out.println(super.name);
        this.out();
    }
}

测试输出

B
A
A
A

总结

  • 子类定义了与父类同名的成员变量,子类对象实际上拥有两个变量,在父类变量可见的情况下,可以通过super访问

  • 子类调用父类方法时,尽管运行时的this对象是子类对象,但父类方法通过this访问变量时,是访问父类的变量,并非子类的同名变量

    image-20220308134142678