簡體   English   中英

如何對課程進行專業化處理有哪些選擇或最佳實踐?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM