2013-04-27 4 views
0

У меня есть абстрактный класс Person и подкласс, который расширяет Person called Employee. Когда я пытаюсь скомпилировать, я получаю ошибку конструктора. Как написать конструктор в классе Employee, чтобы он скомпилировался? Пожалуйста, дайте мне знать, если вам нужна дополнительная информация по этому вопросу. Спасибо.Конструктор подкласса не компилируется

public abstract class Person { //Person abstract class 
    public String firstName; 
    public String lastName; 
    public char gender; 

    public Person(String fname, String lname, char g) { //constructor 
     firstName = fname; 
     lastName = lname; 
     gender = g; 
    } 
    public abstract void setDefaults(); 
} 

public class Employee extends Person { //Employee class that extends Person 

    public Employee() { //i thought super(); might solve the problem, but it didnt. 
     super(); 
    } 
    public void setDefaults() {} 
} 
+0

У человека нет конструктора нулевых аргументов. Либо создайте, либо вызовите конструктор суперкласса, который существует. – Aurand

+0

У человека нет пустого конструктора, здесь для сотрудника либо необходимо передать его параметры владельца, либо позволить людям, которые собирают Employee, передать их – MadProgrammer

+0

Спасибо всем за вашу помощь. – Phong

ответ

4

Вы забыли передать параметры вашей super() декларации. Вашему абстрактному конструктору нужны параметры. Параметры в super() должны совпадать с вашим родительским конструктором. Единственный способ, которым вы могли бы использовать super() без каких-либо параметров, был бы, если ваш родительский конструктор вообще не имеет параметров.

public abstract class Person { //Person abstract class 
    public String firstName; 
    public String lastName; 
    public char gender; 

    public Person(String fname, String lname, char g) { //constructor 
     firstName = fname; 
     lastName = lname; 
     gender = g; 
    } 
    public abstract void setDefaults(); 
} 

public class Employee extends Person { //Employee class that extends Person 

    public Employee(String fname, String lname, char g) { //i thought super(); might solve the problem, but it didnt. 
     super(fname, lname, g); 
    } 
    public void setDefaults() {} 
} 
1

это он

public Employee(String fname, String lname, char g) { 
    super(fname, lname, g); 
... 
1

Это потому, что super(); без параметров не доступен, так как вы определили свой собственный конструктор в Person.

Вы можете это исправить путем пересмотра определения конструктора в Employee принимать и передавать те же параметры, как конструктор, созданный в суперкласса лицо:

public Employee(String fname, String lname, char g) { 
    super(fname, lname, g); 
} 
1

Вы звоните супер(), который приравнивает к суперкласс ". Но у вас нет конструктора по умолчанию (без аргументов). Вы можете сделать

super("John", "Doe", 'M'); 
Смежные вопросы