2011-02-27 3 views
0

모든 메소드가 가시성을 보호해야하는 간단한 Ruby 기본 클래스가 있습니다. 다른 클래스가 기본 클래스를 상속하고 메서드를 호출 할 때 문제가 발생합니다. Ruby 인터프리터가 멈추고 그것이 해석하는 첫 번째 메소드가 보호 된 메소드이고 클래스가 호출 할 수 없다고 알려줍니다. 여기 내 코드는 다음과 같습니다.Ruby Protected Methods 문제

class Base 
    protected 
    def methodOne 
    # method code 
    end 

    def methodTwo 
    # method code 
    end 

end 

오류는 하위 클래스가 메서드를 기반에서 호출 할 때 발생합니다.

Subclass.new.methodOne 

분명히 Ruby의 가시성/상속 모델에 중요한 것이 누락되었습니다. 어떤 도움을 주셔서 감사합니다!

답변

3

자신의 상속 된 보호 된 메소드 만 호출 할 수 있습니다.

당신이하고있는 일은 다른 새로운 개체 (Base.new)를 만들고 그것에 methodOne을 호출하는 것입니다.

class Extended < Base 

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

end 
+0

내가 내 원래의 게시물에 잘못했다 : 당신은 self.methodOne

예를 할 필요가있다. 전화 회선은 Extended.new.methodOne입니다. 당신의 대답을 사용하여, 나는 Extended 내에서 생성자를 만들었고, 당신이 제안한 것처럼 self.methodOne을 호출했다. Extended.new.methodOne이 오류를 호출한다는 것이 이상하다는 것을 알게되었습니다. – webren

+0

내부 메소드 (자신의 메소드 사용)와 외부 메소드 (다른 객체 메소드 사용)를 호출하는 방법을 살펴 본다면. 외부에서는 public 메소드 만 호출 할 수 있습니다. 내부에서는 모든 공용 메소드, 모든 고유 메소드 (상속 된 메소드는 아님) 및 모든 자체 및 상속 된 보호 메소드를 호출 할 수 있습니다. –