2016-12-17 11 views
-1

Если у меня есть суперкласс с некоторыми атрибутами и 2 конструкторами, как, например,Как правильно использовать несколько конструкторов моего суперкласса в подклассе? (Java)

class Employe { 
    private final String nom; 
    private double income; 
    private double occupation; 

    public Employe(String n, double i, double o) { 
     nom = n; 
     income = i; 
     occupation = o; 
    } 

    public Employe(String n, double i) { 
     this(n, i, 100); 
    } 
} 

и подкласса

class Manager extends Employe { 

    private int days; 
    private int clients; 
} 

Если я хочу использовать оба cosntructors суперкласса у меня определить

public Manager(String nom, double sal, int d, int c, double occ) { 
    super(nom, sal, occ); 
    days = d; 
    clients = c; 
} 

public Manager(String nom, double sal, int d, int c) { 
    super(nom, sal); 
    days = d; 
    clients = c; 
} 

или есть лучший способ, которым я мог бы предотвратить дублирование кода атрибутов дней и клиентов в категории Manager?

+1

* дублирование экземпляра * Надеюсь, вы имели в виду дублирование кода, потому что вы будете называть только один конструктор, поэтому не будет никакого дублирования экземпляра *. – Mritunjay

+0

вы правы, конечно, я имел в виду дублирование кода –

ответ

0

Невозможно косвенно вызвать определенный конструктор класса Parent, поскольку конструкторы не наследуются во время наследования.

Таким образом, вам нужно будет использовать super для вызова конструктора класса Parent.

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

public Manager(String nom, double sal, int d, int c, double occ) { 
    super(nom, sal, occ); 
    days = d; 
    clients = c; 
} 

public Manager(String nom, double sal, int d, int c) { 
    super(nom, sal, 100,d,c); 
} 

Но это было лучше зависит от того, чего вы хотите достичь в своем случае.

0

В вашем примере можно было бы написать так:

public Manager(String nom, double sal, int d, int c, double occ) { 
    super(nom, sal, occ); 
    days = d; 
    clients = c; 
} 

public Manager(String nom, double sal, int d, int c) { 
    this(nom, sal, 100, d, c); 
} 

, который позволяет избежать дублирования заданий для days и clients. Тем не менее, в этом процессе вы жестко подключаете суперклас по умолчанию для occupation в подкласс. Это может быть плохо.

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