继承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()); } }
修复说明
- 移除了冗余的
name成员变量和无用的Public方法; - 在Student的构造方法中添加
super(name),正确调用父类构造完成name属性的初始化; - 在
printDetail方法中使用父类的getName()方法获取name值,保证数据一致性; - 把成员变量
department和id改成private,符合面向对象的封装原则(如果题目允许public也可以保留,但封装更规范)。
内容的提问来源于stack exchange,提问作者Gazi Sharin Mostafiz
相关产品推荐
相关产品推荐

