2011-09-15 34 views
0

我有一個已經創建的Person類及其各自的屬性;最終一個人可以變成員工。如何專業課程有什麼選擇或最佳做法?

使用繼承,Employee可以是Person的子類。如何將這個Person轉換(「專門化」)到一個Employee而不需要將它的所有屬性轉換到新的Employee類?

擁有一個獨立的(關於繼承)具有Person類型屬性的Employee類(如在DB中經常見到的)是否更好?

在此先感謝!

+3

@downvoter,請幫助OP改善他的問題,而不是默默地downvoting和投票結束。 – davin

+2

我不太明白這個問題 - 你的意思是說你最終想從'Person'創建一個'Employee'的實例嗎?你可能會想'Employee.fromPerson(person)'或類似的東西。 –

回答

3

這在Java中不可行。一個對象有一個類型,並且不能獲得一個新類型。如果它是一個人,它將永遠是一個人,永遠不會是一名員工。您可以創建一個新的對象類型員工的,從一個人,雖然:

public class Person { 
    private String name; 

    public Person(String name) { 
     this.name = name; 
    } 

    /** 
    * copy constructor 
    */ 
    protected Person(Person p) { 
     this.name = p.name; 
    } 

    // ... 
} 

public class Employee extends Person { 
    private String badge; 

    public Employee(Person p, String badge) { 
     super(p); 
     this.badge = badge; 
    } 

    // ... 
} 
0

據我瞭解,問題是的傳承(IS-A)或成分(具有-A)?

一般來說,這些通常是替代品。一般而言,繼承性破壞了封裝,所以它不應該被過度使用/濫用,但Java根本不支持組合語言。

具體說明 - 員工始終是Person,所以將其作爲子類是的正確方法。它可以被模擬爲組合,Person實例是Employee類的一個屬性,但是說「Employee has Person」(屬性)聽起來很奇怪,所以我會避免它,除非我有這種解決方案的其他原因。

相關問題