你是正確的,不存在作爲紅寶石一個明確的概念,不像它的大量使用像Java語言編寫的。
但是你也是對的,有很多情況需要保證。
下面是我已經走了一下,你的榜樣 -
class AbstractShape
attr_accessor :edges
def initialize
# ...
end
def get_area
raise NoMethodError("Override this implementation")
end
end
class Square < AbstractShape
def initialize
# square-specific stuff
super
end
def get_area
self.edges * foo * bar
end
end
的關鍵是定義在頂層的可讀性和一致性,所有可用的方法,但要確保他們提出如果有錯誤用過的。
如果有,你是絕對肯定會以同樣的方式在所有的形狀被一致地使用,那麼一個方法把它定義在AbstractShape
的attr_accessor
也將繼承,所以你必須@edges
可在每每個形狀的實例基礎。但是您仍然可以在AbstractShape
類中引用@edges
,因爲它們只會使用正確的本地實例變量。
只需創建一個基類,不實例化。看起來對我來說足夠了。 :) –
記住Ruby是動態類型的,所以你甚至不需要基類 - 只有三個類都有'get_area'方法。 – matt