在Java中,为什么变量不在子类中继承?
我有两节课。一个Person类和一个Patient类,其中Person是父类,Patient是子类。我有变量firstName和lastName,变量名是Person类中两者的组合,如下所示:在Java中,为什么变量不在子类中继承?,java,inheritance,Java,Inheritance,我有两节课。一个Person类和一个Patient类,其中Person是父类,Patient是子类。我有变量firstName和lastName,变量名是Person类中两者的组合,如下所示: public Person (String initialFirstName, String initialLastName){ firstName = initialFirstName; lastName = initialLastName; name = firstName +
public Person (String initialFirstName, String initialLastName){
firstName = initialFirstName;
lastName = initialLastName;
name = firstName + " " + lastName;
}
但是当我想让Patient类继承这些变量时,它不会
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName);
super(initialLastName);
}
我不知道为什么它不起作用。我唯一能想到的是,在继承变量时不能有两个超级,但我不确定。试试这个
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName,initialLastName);
}
而不是
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName);
super(initialLastName);
}
构造函数的调用必须是
子类构造函数
无论如何,下面的代码行应该会给您带来编译错误
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName);
super(initialLastName);
}
应该是
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName, initialLastName);
}
另外,请注意
使用超级参数列表,将调用具有匹配参数列表的超类构造函数
因此,请参考您的代码superinitialFirstName;由于在super类中没有定义匹配的参数列表构造函数,因此给您提供编译错误。您可以使用此
public Patient (String initialFirstName, String initialLastName){
super(initialFirstName,initialLastName);
}
或者,如果这两个字段是受保护的或公共的,并且您不希望由构造函数设置,那么您可以尝试这样做
public Patient (String initialFirstName, String initialLastName){
super.firstName = initialFirstName;
super.lastName = initialLastName;
}
它应该是superinitialFirstName,initialLastName;这不是一个非继承问题。您正在调用一个不存在的基类构造函数。听起来像是可见性问题。如果变量被声明为private,则Patient类无法访问这些变量。当然,我们需要更多的课程。你说它不会继承这些变量是什么意思?此外,您还有一个语法错误。超级构造函数只能调用一次,不能像在代码中那样调用两次。@ajheilman请阅读此内容