我有以下问题:implicit super constructor is undefined must invoke another constructor java
。我有两个类,一个继承并调用了超级类-方法。
人员分类:
public class Person {
private String firstName;
private String name;
private Date birthday;
private Gender gender = Gender.Unknown;
Person(String fn, String n, Date d, Gender g){
firstName = fn;
name = n;
birthday = d;
gender = g;
}
Person(Person p){
firstName = p.firstName;
name = p.name;
birthday = new Date(p.birthday);
gender = p.gender;
}
Person(String fn, String n){
firstName = fn;
name = n;
}
和第二类:
public class Student extends Person implements Noten {
private int nr;
private String st;
Student(int m, String s){
this.nr= m;
this.st= s;
}
Student(Person p) {
super(p);
// TODO Auto-generated constructor stub
}
为什么要扩展到类Person,学生类必须实现Stundet(Person p)-方法?
一个解决方案:将Person()-方法添加到Person-Class
:
Person(){
System.out,println("Hello World"};
仍然不起作用。
第一个问题:为什么super(p)-方法不起作用?
第二个问题:即使不添加Person()
,如何在Person-Class
中没有参数的情况下,如何使它工作?
第三个问题:为什么不添加Person()
-起作用?
第一个问题:为什么super(p)-方法不起作用?
在[[second Student
构造函数中,它工作正常。
第二个问题:即使不添加Person()-没有参数的Person-Class,我如何使它工作?
您需要在该[[firstPerson
构造函数中使用super(...)
语法调用Student
构造函数的one,因为您必须至少提供一个firstName
和一个name
。
向Person
添加了无参数构造函数确实有效,因为编译器现在可以在first
Person
构造函数中隐式调用该Student
构造函数。