我有一個已經創建的Person類及其各自的屬性;最終一個人可以變成員工。如何專業課程有什麼選擇或最佳做法?
使用繼承,Employee可以是Person的子類。如何將這個Person轉換(「專門化」)到一個Employee而不需要將它的所有屬性轉換到新的Employee類?
擁有一個獨立的(關於繼承)具有Person類型屬性的Employee類(如在DB中經常見到的)是否更好?
在此先感謝!
我有一個已經創建的Person類及其各自的屬性;最終一個人可以變成員工。如何專業課程有什麼選擇或最佳做法?
使用繼承,Employee可以是Person的子類。如何將這個Person轉換(「專門化」)到一個Employee而不需要將它的所有屬性轉換到新的Employee類?
擁有一個獨立的(關於繼承)具有Person類型屬性的Employee類(如在DB中經常見到的)是否更好?
在此先感謝!
這在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;
}
// ...
}
據我瞭解,問題是的傳承(IS-A)或成分(具有-A)?
一般來說,這些通常是替代品。一般而言,繼承性破壞了封裝,所以它不應該被過度使用/濫用,但Java根本不支持組合語言。
具體說明 - 員工始終是Person,所以將其作爲子類是的正確方法。它可以被模擬爲組合,Person實例是Employee類的一個屬性,但是說「Employee has Person」(屬性)聽起來很奇怪,所以我會避免它,除非我有這種解決方案的其他原因。
@downvoter,請幫助OP改善他的問題,而不是默默地downvoting和投票結束。 – davin
我不太明白這個問題 - 你的意思是說你最終想從'Person'創建一個'Employee'的實例嗎?你可能會想'Employee.fromPerson(person)'或類似的東西。 –