Java – 父类和子类拥有同名的成员变量取值情况

参考文章

结论:

  1. 当子类的成员变量与父类同名时,若对该成员变量进行操作的方法继承于父类,则改变和获取的是父类的成员变量。
  2. 若对该成员变量进行操作的方法为子类所独有,或override父类,则改变和获取的是子类自己的成员变量。

当子类拥有与父类同名的成员变量时,父类的成员变量并不会被覆盖,而是与子类的成员变量分别存储在不同的空间,其值仍然可以被改变和访问。

class Employee{

    private String title = "Employee";

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return this.title;
    }

}

class Manager extends Employee{

    private String title = "Manager";

}

class Director extends Employee{

    private String title = "Director";

    public String getTitle() {
        return this.title;
    }
}

public class SameName {

    public static void main(String[] args) {

    Employee e = new Employee();
    Employee m = new Manager();
    Director d = new Director();

    System.out.println(e.getTitle());

    //子类Manager的getTitle方法继承于父类Employee,
    //因此调用时,访问的是父类的同名成员变量
    System.out.println(m.getTitle());

    //子类Director override父类的getTitle方法,
    //因此调用时,访问的是子类自己的成员变量
    System.out.println(d.getTitle());

    //子类Director的setTitle方法继承于父类Employee,
    //因此调用时,改变的是父类的同名成员变量
    d.setTitle("President");
    System.out.println(d.getTitle());

    }
}

运行输出结果为

Employee Employee Director Director


因此,当子类的成员变量与父类同名时,若对该成员变量进行操作的方法继承于父类,则改变和获取的是父类的成员变量。

若对该成员变量进行操作的方法为子类所独有,或override父类,则改变和获取的是子类自己的成员变量。