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

Java子类无法访问父类属性求助:super关键字使用与属性赋值

解决子类无法访问父类属性的问题

哥们,我瞅了你的代码,问题核心是父类的属性压根没被正确初始化,而且你对super关键字的用法有点跑偏,咱们一步步捋明白:

问题根源

  1. 父类Member的name和email是private修饰的,子类Teacher根本没法直接碰这些属性;
  2. 父类既没提供带参数的构造器,也没写setter方法,导致子类完全没机会给父类的属性赋值;
  3. 你在Teacher构造器里调用super.getName()和super.getEmail()只是读属性值(这时候属性还是null),根本没做赋值操作,打印出来自然是空的。

解决方案

咱们给父类加个带参数的构造器,然后在子类构造器里用super()调用父类构造器来初始化父类属性,这样子类就能通过父类的get方法拿到正确的值了。

修改后的父类Member代码

public class Member {
    private String email;
    private String name;

    // 新增带参数构造器,专门用来初始化name和email
    public Member(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }
}

修改后的子类Teacher代码

class Teacher extends Member {
    private String qualifications;

    // 子类构造器第一行必须调用父类构造器,完成父类属性初始化
    public Teacher(String name, String email, String qualifications) {
        super(name, email); // 这行是关键:把传入的name和email交给父类初始化
        this.qualifications = qualifications;
    }

    public String getQualifications() {
        return qualifications;
    }

    public String toString() {
        StringBuffer details = new StringBuffer();
        details.append(super.getName());
        details.append(' ');
        if (qualifications != null && qualifications.trim().length() > 0) {
            details.append("(" + qualifications + ")");
            details.append(' ');
        }
        details.append(super.getEmail());
        return details.toString();
    }
}

关键知识点唠两句

  • super的正确打开方式:要调用父类构造器的话,super(参数)必须放在子类构造器的第一行,这样才能在子类自己初始化前,先把父类的属性搞定;
  • 私有属性的规矩:private修饰的属性只能被自己类操作,子类必须通过父类提供的构造器、setter方法或者公共getter来打交道;
  • 要是你不想给父类加带参构造器,也可以给Member加setName()和setEmail()方法,然后在Teacher构造器里调用super.setName(name)和super.setEmail(email)来赋值,但用构造器初始化是更规范的做法。

现在跑代码,就能正确打印出name、qualifications和email的内容啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:18:19