我自学java,正在处理我的继承教科书中的一些问题。问题基本上是创建一个超类Person
并添加另外两个类student
和instructor
,其中学生有专业,教师有薪水。
无论如何,这是我到目前为止所拥有的
public class Person {
private String name;
private String date;
public Person(String name, String date)
{
this.name = name;
this.date = date;
}
public String getName()
{
return name;
}
public String getDate()
{
return date;
}
public String toString()
{
return "The name of the person is :" + getName() + " And this person was born in " + getDate();
}
}
Student.java
public class Student extends Person {
private String major;
public Student(String major)
{
super(super.getName(),super.getDate()); // ERROR
this.major = major;
}
}
我的思维过程
由于每个学生都有姓名和出生日期,当我调用超级构造函数时,我可以传入在我的原始超类中返回Person
名称的方法。显然,你可以说这不起作用解决方案就是
public Student(String name, String birthDate, String major)
{
super(name,birthDate);
this.major = major;
}
我以为我会在构造函数Student
中保存两个额外的变量,只需调用方法.getName()
和.getDate()
,我再次阅读本章,但我真的不明白问题所在。
TLDR 这条线的错误
super(super.getName(),super.getDate());
非常感谢
答案 0 :(得分:1)
类就像是如何创建对象的蓝图。
在您的情况下,您有2个类,Person
作为基类,然后Student
继承自Person
。
当您尝试通过构造函数方法从Student
类创建对象时,编译器将首先构建Person
对象,但请注意,在此阶段,基类{{1在你调用Person
构造函数之前,还没有构建。
所以当你说,我想使用我的"尚未构建的基类(Person)"中的方法,因为编译器知道一个时间的推移,这不会起作用因为在super()
返回(已完成运行)之前,父对象(可从super
关键字访问)尚未到达。因此,在构建父级之前执行父类。super()
方法是无效的。
也像许多人说的那样,即使您能够使用getName()
方法,它也不会有任何值,因为它没有设置默认值。
希望这有帮助,很高兴进一步讨论。
答案 1 :(得分:0)
你不能在构造函数中引用超级方法。在运行子类的构造函数时,超级对象不是(null)。