※ 引述《sorryChen (陳揚和)》之銘言:
: 假設我原來有個class ex: car.. 有個static variable 叫 num_of_wheel
: 現在發現我要有很多種car 各有不同的 num_of_wheel.
: (每種車wheel的個數是一樣的..)
: 這樣透過 繼承override num_of_wheel 是一般的做法嗎
1) 既然你不同的 car 有不同的 num_of_wheel 就代表那不是 class attribute
(static variable) 了.
2) 每輛車有不同的輪子數, 那num_of_wheel 很明顯就是 車子的 attribute 了,
該是 class Car 數面有 num_of_wheel 的 instance attribute
3) 常見的 OOPL, 沒法 "override" 一個 variable
4) 一般做法是把 num_of_wheel 作為 Car 的 member attribute, 要是真的
需要有不同類的車 (有時可能靠本身的 attribute 就夠表達, 那就不必
濫用繼承), 而 每種車都有該種車的輪子數量, 就在各類車子的 subclass
設自己的 num_of_wheel 好了
用別的例子, 比如動物有不同叫聲 (半 psuedo code)
abstract class Animal { // 專作繼承用的
private String m_voice;
protected Animal(String voice) {
m_voice = voice;
}
public void shout() {
print("SHOUT: " + m_voice);
}
class Duck extends Animal {
public Duck() {
super("Quack");
}
}
class Cat extends Animal {
public Cat() {
super("Meow");
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 202.155.236.82
※ 編輯: adrianshum 來自: 202.155.236.82 (07/30 10:36)
※ 編輯: adrianshum 來自: 202.155.236.82 (07/30 10:42)