你是正确的,不存在作为红宝石一个明确的概念,不像它的大量使用像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