You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用子类对象继承的父类getter方法为何返回父类属性值?

为什么teacher.getName()返回"person"?

先看你给出的两个类代码:

Person类

public class Person {
    public String name = "person";
    public String getName(){
      return name;
    };
}

Teacher类

public class Teacher extends Person{
    public String name ="teacher";

    public static void main(String[] args) {
        Teacher teacher = new Teacher();
        System.out.println(teacher.getName());
    }
}

问题解答

核心原因是Java的成员变量没有多态性,只有方法才支持多态特性。

具体拆解:

  1. Teacher类继承了Person的getName()方法,但没有重写这个方法,调用时执行的是父类Person中的getName()实现。
  2. 在父类的getName()里,return name本质是return this.name,这里的name是Person类自己定义的成员变量。
  3. 子类Teacher中定义的同名name属性,只是隐藏了父类的name,不是覆盖——因为属性不支持多态,父类方法只会访问自身类中定义的成员变量,不会被子类的同名属性替换。

你提到的「不管父类name是私有还是公有,结果都是person」也能对应这个逻辑:

  • 如果父类name是私有:父类的getName()方法属于Person类,天然能访问自己的私有成员,子类继承该方法后,执行时依然访问父类的私有name。
  • 如果父类name是公有:子类的同名name只是隐藏了父类属性,父类方法里的name还是指向自己的那个,不会指向子类的。

内容的提问来源于stack exchange,提问作者zfing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:50:28