2013-10-02 3 views
0

Родительский класс ...Многоуровневого Наследование по умолчанию Конструктор

public class UMember { 
    private String first; 
    private String last; 
    private String street; 
    private String city; 
    private String state; 
    private String zipcode; 

    public UMember() { 
     this("na", "na", "na", "na", "na", "na"); 
    } 

    public UMember(String first, String last, String street, 
      String city, String state, String zipcode){ 
     set(first, last, street, city, state, zipcode); 
    } 

    private void set(String first, String last, String street, 
      String city, String state, String zipcode){ 
     this.first = first; 
     this.last = last; 
     this.street = street; 
     this.city = city; 
     this.state = state; 
     this.zipcode = zipcode; 
    } 

    public void setUMember(String first, String last, String street, 
      String city, String state, String zipcode) { 
     set(first, last, street, city, state, zipcode); 
    } 

Родитель подкласс UMember является ...

public class Employee extends UMember { 
    private int eid; 
    private String doh; 
    private String dept; 
    private double salary; 

    public Employee() { 
     this(0, "na", "na", 0.0, "na", "na", "na", "na", "na", "na"); 
    } 

    public Employee(int eid, String doh, String dept, double salary) { 
     this(eid, doh, dept, salary, "na", "na", "na", "na", "na", "na"); 
    } 



    public Employee(int eid, String doh, String dept, double salary, 
      String first, String last, String street, String city, 
      String state, String zipcode) { 
     super(first, last, street, city, state, zipcode); 
     set(eid, doh, dept, salary); 
    } 

    private void set(int eid, String doh, String dept, double salary) { 
     this.setEid(eid); 
     this.setDoh(doh); 
     this.setDept(dept); 
     this.setSalary(salary); 
    } 

    private void setEmployee(int eid, String doh, String dept, double salary, 
      String first, String last, String street, String city, 
      String state, String zipcode) { 
     setUMember(first, last, street, city, state, zipcode); 
     set(eid, doh, dept, salary); 
    } 

Подкласса Работника ...

public class Faculty extends Employee{ 
    private String rank; 
    private int annualTeachingLoad; 

    public Faculty() { 
     this("na", 0, 0, "na", "na", 0.0, 
       "na", "na", "na", "na", "na", "na"); 
    } 

    public Faculty(String rank, int annualTeachingLoad) { 
     this(rank, annualTeachingLoad, 0, "na", "na", 0.0, 
       "na", "na", "na", "na", "na", "na"); 
    } 

Ни один из конструкторов по умолчанию, указанных выше в подклассе факультета, не является правильным. Я не могу понять, почему. Сначала я использую значения по умолчанию для факультета, затем Employee, наконец, UMember. Любая помощь по поводу того, почему оба эти фрагмента кода являются неправильными, будет высоко оценена.

+0

'супер (...)' должно быть первым, что называется. –

+0

@SotiriosDelimanolis - Где вы видите, что OP нарушает это правило? –

+0

Что значит «неверный код?» –

ответ

2

Вы вызываете конструктор с this вместо super. Вызов конструктора с this сможет вызывать только конструкторы, объявленные в одном классе, тогда как super предназначен для вызовов конструкторов в суперклассе.

+0

Итак, код в моем классе Employee, который вызывает конструктор по умолчанию со всеми значениями по умолчанию для Employee и UMember. Это то, что я пытаюсь написать еще раз, но в классе факультета. –

+0

Если вы хотите вызвать конструктор, объявленный в суперклассе вместо 'this', вам нужно вызвать его с помощью' super', а не 'this'. – tbodt

Смежные вопросы