2011-02-27 103 views
0

我有一个简单的Ruby基类,其中所有方法都需要保护可见性。当另一个类继承基类并调用它的方法时,会出现问题。 Ruby解释器停止并告诉我它解释的第一个方法是受保护的方法,并告诉我该类不能调用它。这里是我的代码:Ruby受保护的方法问题

class Base 
    protected 
    def methodOne 
    # method code 
    end 

    def methodTwo 
    # method code 
    end 

end 

当子类从基地调用一个方法时发生错误。

Subclass.new.methodOne 

我明显错过了Ruby的可见性/继承模型。任何帮助表示赞赏!

回答

3

您只能调用自己的和继承的受保护方法。

你正在做的是创建一个新的对象(与Base.new),并呼吁methodOne就可以了。你需要做的self.methodOne

例子:

class Extended < Base 

    def new_method 
    self.methodOne # calling method one defined in Base 
    end 

end 
+0

我在我原来的职位是错误的。呼叫线路是Extended.new.methodOne。使用你的答案,我只是在Extended中创建了一个构造函数,并且像你所建议的那样调用了self.methodOne。我觉得很奇怪Extended.new.methodOne会调用一个错误。 – webren 2011-02-27 21:12:30

+0

如果您将方法的调用看作内部(使用您自己的方法)和外部(使用其他对象的方法)。外部你只能调用公共方法。内部可以调用所有公共方法,所有你自己的私有方法(但不是那些继承的方法)以及所有你自己的和继承的受保护方法。 – 2011-02-28 09:30:48