2012-12-29 43 views
-2

實際上,我在尋找一個普遍的答案或鏈接到關於這個問題的信息,但我認爲這個問題最好由一個具體的例子說明:使用一個子類使用的標識字段或VS靜態常量

例。 1:

class Car { 

} 

class Sedan extends Car { 

} 

// ... etc. where 10+ classes will extend Car 

Ex。 2:

class Car { 

    public enum CarId { 
    SEDAN, 
    COUPE, 
    // ... 
    } 

    public Car(CarId id) { 
     //... 
    } 
} 

假設在這種情況下該轎車,跑車等將不會被提供更加複雜(可能是一個單個場,其可以或者可以不爲空,也就是說,一個字段的一些將使用,但其他人不會)。

在什麼情況下使用它們中的每一種?問題的具體特徵將決定使用哪個特徵? 具體來說,你爲什麼要使用第二個而不是第一個。我不明白這是多麼模糊,它需要一個投票。這個問題並沒有問什麼是繼承或什麼枚舉。提供投票的理由。

未能顯示研究工作:
這是非常具體的,我問的唯一原因是因爲我不能谷歌的例子。如果這是原因,至少提供一個信息源。

模糊:
這是非常具體的。

有用的:
我面臨的情況,可以使用兩個。我可以使用一些信息,我應該尋找什麼來決定。

+2

你有什麼問題? – Ravi

+1

@var___編輯。我認爲沒有解釋的評論值得讚賞。 – roundar

回答

2

想這樣:

汽車是一個對象。在OOP中,對象具有狀態(也稱爲屬性/屬性),行爲。

對象狀態用類字段表示,對象行爲用方法表示。

現在,舉個例子:汽車是一個物體,汽車的屬性是名稱,品牌,等等。汽車的行爲將applyBrakse(),accelarate(),...等

所以我想創建Car對象如下:

class Car { 

    private String name; 
    private String brand; 
    private String type; 
    // ...... other properties 

    // constructor, getter and setter methods 

    public void applyBrakes() { 
     // code to apply brakes 
    } 

    public void accelarate() { 
     // code to apply brakes 
    } 

    // ... other behavioral methods 

} 
+0

謝謝。想到的事情就像事件:AWTEvents是ActionEvent,AdjustmentEvent等的超類。在上述模型中,這些子類也可以簡單地作爲AWTEvent的一個屬性。相反,他們已經使用事件ID擴展AWTEvent。他們爲什麼選擇這樣做而不是僅僅是一個AWTEvent的財產? – roundar

+0

@roundar:如果你想繼承,那麼你可以有'class Vehicle'和'Class Car extends Vehicle'。 –

+0

什麼讓我們決定讓Car成爲車輛的一個子類而不是一個屬性? – roundar

相關問題