2011-02-27 163 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