2015-07-17 3 views
0

У меня есть один класс родителя и два класса для детей. Также он имеет getEmployeeDetails, который возвращает Type Employee. Employee - абстрактный класс, расширенный Менеджером и Инженером.Design Pattern: OOPs and Inheritance

Пример кода:

public class Parent{ 

    public Employee getEmployeeDetails(int id){ 
     //doStuff 
    } 
} 

public class child1 extends Parent{ 
    @Override 
    public Manager getEmployeeDetails(int id){ 
     //doStuff 
    } 
} 

public class child2 extends Parent{ 
} 

Теперь я хочу, чтобы мой child1 переопределить getEmployeeDetails и вернуть менеджер типа. Кроме того, если я хочу установить конкретные данные для сотрудников в «Родительский» и переопределить это, а также добавить к методу oveerridden, что должно быть сделано в качестве родителя, поскольку Employee - абстрактный класс? Также, пожалуйста, предложите любую лучшую картину.

+7

Использование 'super.setEmployeeDetails (int id)' для установки конкретных сведений о сотруднике и добавления к методу oveerridden –

+1

@Codegeek Похоже, что 'Parent' не является' классом'. Это может быть n 'interface' – CKing

+0

@ Darshan Patel ему нужно еще добавить – codegeek

ответ

0
public abstract class Parent{ 

    public final Employee getEmployeeDetails(int id){ 
     //doStuff 
     return getEmployeeDetailsImpl(id); 
    } 

    protected abstract Employee getEmployeeDetailsImpl(int id); 
} 

public final class child1 extends Parent{ 
    @Override 
    protected final Employee getEmployeeDetails(int id){ 
     //doStuff 
     return new Manager(id); 
    } 
} 

public final class child2 extends Parent{ 
    @Override 
    protected final Employee getEmployeeDetails(int id){ 
     //doStuff 
     return new Engineer(id); 
    } 
} 

Возможно, вам потребуется адаптировать подпись getEmployeeDetailsImpl в соответствии с вашими потребностями.