超类不匹配

时间:2014-06-29 13:03:17

标签: ruby inheritance

我正在尝试按如下方式进行继承程序:

class P1
end

class P2
end

class A < P1
end

class A < P2
end

当我运行此程序时,我收到如下错误:

superclass mismatch for class A (TypeError)

如何解决此错误?

1 个答案:

答案 0 :(得分:6)

在定义类时,默认情况下会继承Object。如果您将其作为任何其他类的子类,那么它将继承该其他类。但是,只有在您首次使用关键字class或方法Class::new定义自定义类时,才能执行此子类化。一旦你定义了它,当你第二次重新打开你的课程时,你就不会被允许改变它的超级课程

在你的例子中:

# here you are defining your new class A, so you can make it now a subclass of
# the parent class of any, like P1
class A < P1
end

# here you are reopeing the same class A. Now you are not again allowed to change the 
# super class of it, which is P1.
class A < P2
end

您可以做的是,制作P1P2模块,然后在程序过程中随时A内包含