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
но я передаю аргументы как родительскому, так и дочернему классу при создании нового объекта в основном методе. Не удалось выяснить, почему ошибка компиляции?
Вам необходимо правильно создать родительский класс, передав ему 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");
// ...
}
Поскольку конструктор в дочернем классе неявно вызывает конструктор без параметров, он сразу же супер-класс, только если конструктор по умолчанию явно не вызывает конструктор суперкласса, поэтому
public Employee1(String id)
{ // Line 1
empID = id;
}
попробует вызвать конструктор в суперклассе, поскольку вы его явно не вызвали, поэтому вы можете сказать, что ваш код будет таким
public Employee1(String id)
{
super(); // Line 1
empID = id;
}
но в родительском классе нет конструктора без аргумента, поэтому он дает ошибку, подобную этой.
В конструкторе employee
вы должны сначала вызвать конструктора person
как в super(name);
и затем инициализировать подкласс
class Employee1 extends Person
{
String empID ="0000";
public Employee1(String id, String name)
{ // Line 1
super(name);
empID = id;
}
}
Неявный супер конструктор Person()
не определен.
Поэтому вы должны явно вызвать его родительский конструктор.