![](/img/trans.png)
[英]Best practice: Java/XML serialization: how to determine to what class to deserialize?
[英]What are the options or best practice in how to specialize a class ?
我已經創建了一個具有相應屬性的Person類; 最終一個人可以變成雇員。
使用繼承,Employee可以是Person的子類。 您如何在無需將其所有屬性都轉移到新的Employee類的情況下將此Person轉換(“專門化”)為Employee?
擁有一個具有Person類型屬性的獨立(關於繼承)的Employee類是否更好(如在DB中經常看到的那樣)?
提前致謝!
在Java中這是不可能的。 對象具有類型,並且不能獲取新的類型。 如果是個人,它將永遠是個人,並且永遠不會是員工。 不過,您可以從Person創建一個類型為Employee的新對象:
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)還是組合(has-A)?
一般來說,這些通常是替代方案。 繼承一般而言,繼承會破壞封裝,因此不應過度使用/濫用,但Java完全不支持語言的編寫。
具體來說-Employee始終是Person,因此將其作為子類是正確的方法 。 可以將其建模為組合,Person實例是Employee類的一個屬性,但是說“ Employee has Person”(屬性)聽起來很奇怪,因此除非我有其他解決方案,否則我將避免使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.