定义的Person类
public abstract class Person {
String name;
int age;
String sex;
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
定义的Person类的子类Worker
public class Worker extends Person{
String name;
int age;
String sex;
public Worker(String name, int age, String sex) {
super(name, age, sex);
}
public void showname(){
System.out.println(this.name);
}
}
在主函数中创建一个Worker类的对象,输入参数之后,输出为null而不是正确的参数
下面是求助chatgpt的回答:
当你调用 w.showname()
方法时,它输出 null
的原因是你的 Worker
类中存在变量遮蔽问题(Variable Shadowing)。在 Worker
类中,你重新声明了 name
字段,这个字段会遮蔽从 Person
类继承的 name
字段,导致 Person
类中的 name
字段没有被正确初始化,因此默认为 null
。
为了解决这个问题,你应该去掉在 Worker
类中的重复字段声明,同时在 Worker
类的构造函数中使用 super(name, age, sex)
来初始化从 Person
类继承的 name
字段,如下所示:
使用注释符删去重复定义的name后,发现确实可以正常输出了