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

继承Person类的Student类编译错误排查与修正求助

你的Student类编译错误原因及修复方案

我帮你梳理下你的Student类里的几个关键问题,这些都是导致编译失败的核心原因:

  • 没有正确调用父类构造方法
    父类Person的无参构造是private的,子类无法访问;而它唯一可调用的构造是带String name参数的版本。你的Student构造方法里没有通过super(name)调用父类的这个构造,Java编译器会默认尝试调用父类的无参构造,这就直接触发了编译错误。

  • 冗余且错误的name成员变量
    Person类已经封装了name属性,并且提供了getName()和setName()的保护方法,你在Student里重新定义public String name完全多余,还会隐藏父类的name属性,导致你在printDetail里使用的是子类自己未正确初始化的name值,而非父类中该有的数据。

  • 无用且命名不规范的方法
    你写的public String Public(String name)方法不仅命名不符合Java小驼峰的规范,而且完全没有实际作用,属于冗余代码,应该直接删掉。


修复后的Student类代码

public class Student extends Person{
    private String department;
    private int id;

    // 构造方法必须调用父类的带参构造
    public Student(String department, int id, String name){
        super(name); // 调用父Person的构造方法初始化name
        this.department = department;
        this.id = id;
    }

    public void setDepartment(String department){
        this.department = department;
    }

    public String getDepartment(){
        return department;
    }

    public void printDetail(){
        // 使用父类的getName()方法获取name
        System.out.println("Department: " + this.department + ", ID: " + this.id + ", Name: " + getName());
    }
}

修复说明

  1. 移除了冗余的name成员变量和无用的Public方法;
  2. 在Student的构造方法中添加super(name),正确调用父类构造完成name属性的初始化;
  3. 在printDetail方法中使用父类的getName()方法获取name值,保证数据一致性;
  4. 把成员变量department和id改成private,符合面向对象的封装原则(如果题目允许public也可以保留,但封装更规范)。

内容的提问来源于stack exchange,提问作者Gazi Sharin Mostafiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:49:47