Java: How can i solve the Error: "implicit super constructor is undefined"

Java: How can i solve the Error: "implicit super constructor is undefined"

我遇到以下问题:implicit super constructor is undefined must invoke another constructor java。我有两个 classes,其中一个继承并调用了超级方法。

人-Class:

    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;
        }

第二个Class:

    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
        }

为什么将扩展到class人,学生class必须实施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?

您需要在 first 中使用 super(...) 语法调用 one Person 构造函数 Student构造函数,因为你必须至少提供一个firstName和一个name.

第三个问题:为什么添加 Person() - 不起作用?

Person 添加了一个无参数构造函数确实有效,因为编译器现在可以在 first [=10] 中隐式调用 Person 构造函数=]构造函数。

补充一下其他人所说的,为了构建 Student class 的实例,您的 class 必须调用 some 构造函数人。否则父 class 中的任何内容都不会被初始化,这将使扩展 Person 变得无用。

由于在您的第一个 Student 构造函数中您没有显式调用 person 构造函数,因此 java 试图找到一个您没有定义的无参数 Person() 构造函数。找不到它,你会看到你看到的这个编译错误。

这是一个非常基础的 java 问题,所以我假设您是 java 的新手。我强烈建议阅读初学者的 java 书籍或在线(深入)教程,以便在开始编码之前了解一些基础知识,或者在练习编码时参考。如果没有这些基础知识,您将花费大量时间转动轮子(或在线等待答案)。