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
,但是当我在main方法中创建新对象时,我正在传递父类和子类的参数。无法找出编译错误的原因?
答案 0 :(得分: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");
// ...
}
答案 1 :(得分:1)
因为只有当默认构造函数没有显式调用超类构造函数时,子类中的构造函数才会隐式调用它的直接超类的无参数构造函数
public Employee1(String id)
{ // Line 1
empID = id;
}
将尝试在超类中调用构造函数,因为您没有明确调用它,所以您可以说您的代码将是这样的
public Employee1(String id)
{
super(); // Line 1
empID = id;
}
但是在你的父类中没有“无参数”构造函数,所以它给出了这样的错误。
答案 2 :(得分:0)
在employee
的构造函数上,您必须首先调用person
中的super(name);
构造函数,然后初始化子类
class Employee1 extends Person
{
String empID ="0000";
public Employee1(String id, String name)
{ // Line 1
super(name);
empID = id;
}
}
答案 3 :(得分:0)
隐式超级构造函数Person()
未定义。
因此,您必须显式调用其父构造函数。