Ошибка конструктора Java в дочернем классе

1
class Person 
{
    String name = "No name";

    public Person(String nm)
    {
        name = nm;
    }
}
class Employee1 extends Person
{
    String empID ="0000";
    public Employee1(String id)
    {                            // Line 1
        empID = id;
    }
}
public class EmployeeTest 
   {
       public static void main(String[] args) {
           Employee1 e = new Employee1("4321");
           Person p = new Person("Hello");
           System.out.println(e.empID);
       }
   }

Я получаю ошибку компиляции, говоря о constructor Person in class Person cannot be applied to given types; required String found no arguments constructor Person in class Person cannot be applied to given types; required String found no arguments но я передаю аргументы как родительскому, так и дочернему классу при создании нового объекта в основном методе. Не удалось выяснить, почему ошибка компиляции?

Теги:

4 ответа

2

Вам необходимо правильно создать родительский класс, передав ему name в качестве Контрагента Person:

public Employee1(String id) {
    super("person name");   // create the parent
    empID = id;
}

Или может быть что-то вроде:

public Employee1(String id, String name) {
    super(name);   // create the parent
    empID = id;
}

public static void main(String[] args) {
    Employee1 e = new Employee1("4321", "Hello");
    // ...
}
  • 0
    Почему я должен создать конструктор parent из дочернего класса? Обычно конструктор родительского класса будет создан и ожидает значения при создании объекта с использованием оператора «new», верно?
1

Поскольку конструктор в дочернем классе неявно вызывает конструктор без параметров, он сразу же супер-класс, только если конструктор по умолчанию явно не вызывает конструктор суперкласса, поэтому

public Employee1(String id)
{                            // Line 1
    empID = id;
}

попробует вызвать конструктор в суперклассе, поскольку вы его явно не вызвали, поэтому вы можете сказать, что ваш код будет таким

public Employee1(String id)
{
    super();                            // Line 1
    empID = id;
}

но в родительском классе нет конструктора без аргумента, поэтому он дает ошибку, подобную этой.

  • 0
    по умолчанию конструктор без аргументов будет создан автоматически, верно?
  • 0
    да, компилятор автоматически предоставляет конструктор по умолчанию без аргументов для любого класса без конструкторов
0

В конструкторе employee вы должны сначала вызвать конструктора person как в super(name); и затем инициализировать подкласс

class Employee1 extends Person
{
    String empID ="0000";
    public Employee1(String id, String name)
    {                            // Line 1
        super(name);
        empID = id;
    }
}
0

Неявный супер конструктор Person() не определен.

Поэтому вы должны явно вызвать его родительский конструктор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню