Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,为什么变量不在子类中继承?_Java_Inheritance - Fatal编程技术网

在Java中,为什么变量不在子类中继承?

在Java中,为什么变量不在子类中继承?,java,inheritance,Java,Inheritance,我有两节课。一个Person类和一个Patient类,其中Person是父类,Patient是子类。我有变量firstName和lastName,变量名是Person类中两者的组合,如下所示: public Person (String initialFirstName, String initialLastName){ firstName = initialFirstName; lastName = initialLastName; name = firstName +

我有两节课。一个Person类和一个Patient类,其中Person是父类,Patient是子类。我有变量firstName和lastName,变量名是Person类中两者的组合,如下所示:

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请阅读此内容