看板 Programming 關於我們 聯絡資訊
※ 引述《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)