Java: Как я могу решить ошибку: "неявный супер-конструктор не определен" - PullRequest
0 голосов
/ 18 марта 2020

У меня следующая проблема: implicit super constructor is undefined must invoke another constructor java. У меня есть два класса, один из которых наследует и вызывает супер-метод.

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

И второй класс:

    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 в классе Student должен быть реализован метод Stundet (Person p) - *? 1014 *

Одно решение: добавить метод Person () в Person-Class:

    Person(){
    System.out,println("Hello World"};

Все еще не работает.

Первый вопрос: Почему метод super (p) - не работает?

Второй вопрос: Как мне заставить его работать, даже не добавляя Person() - без параметров к Person-Class?

Третий вопрос: Почему не сделал т добавление Person() - работа?

Ответы [ 2 ]

1 голос
/ 18 марта 2020

Первый вопрос: Почему метод super (p) - не работает?

Он отлично работает, в этом втором Student конструкторе.

Второй вопрос: Как мне заставить его работать даже без добавления Person () - без параметров в Person-Class?

Вам нужно позвонить один из конструкторов Person, использующих синтаксис super(...) в этом конструкторе first Student, поскольку вы должны предоставить как минимум firstName и a name.

Третий вопрос: Почему не добавляется Person () - работает?

Добавлен конструктор без аргументов в Person, так как работает теперь компилятор может неявно вызывать этот конструктор Person в конструкторе first Student.

0 голосов
/ 18 марта 2020

Чтобы добавить то, что сказали другие, для создания экземпляра вашего класса Student ваш класс должен вызвать some конструктор в Person. В противном случае ничто в родительском классе не будет инициализировано, что сделает расширение Person бесполезным.

Поскольку в вашем первом конструкторе Student вы не вызываете явно конструктор person, java пытается найти Person без аргументов ( ) конструктор, который вы не определили. Не найдя его, вы получаете эту ошибку компиляции, которую видите.

Это очень базовый c java вопрос, поэтому я предполагаю, что вы очень плохо знакомы с java. Я настоятельно рекомендую прочитать книгу java для начинающих или онлайн (углубленное) учебное пособие, чтобы ознакомиться с некоторыми основами перед тем, как вы начнете кодировать, или обратиться к ним во время практики кодирования. Вы не потратите много времени на то, чтобы крутить колеса (или ждать ответов онлайн) без этих основ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...