2014-12-12 3 views
0

어떤 방법으로 object O을 받았습니다.파생 된 객체의 기본 부분에 액세스

이 오브젝트 O는 기본 오브젝트 BaseClass에서 파생되며 유형이 BaseClass 인 파트를가집니다.

이 방법을 사용할 때이 부분에 액세스하려면 어떻게해야합니까? 즉, 객체의 컨텍스트에 있지 않기 때문에 super이 작동하지 않습니다.

감사합니다.

답변

3

내가 이해할 수 있도록 질문을 다시 말하게하십시오. 메소드 (예 : "test")가 포함 된 클래스 O가 있습니다. 이 메서드에서는 상위 클래스 BaseClass에 속한 인스턴스 변수에 액세스하려고합니다.

올바른 경우이 인스턴스 변수에 직접 액세스 할 수 있습니다. 변수의 이름을 입력하기 만하면됩니다. 서브 클래스는 수퍼 클래스에서 볼 수있는 모든 인스턴스 변수에 액세스 할 수 있습니다.

변수에 대한 get 및 set 메서드를 만들고 하위 클래스에서 해당 메서드를 호출하여 변수에 액세스하는 방법을 고려해야하지만 선택 사항입니다.

1

문제 행동을 의미 곳에 나 오히려 모양보다 (방법)의 경우에 유용 할 수있는 다른 답변을 제공하자 (인스턴스 변수를.)

당신이 두 개의 클래스 C와 D 및 C 인스턴스가 가정 이제 C가 C '로부터 상속받는 것으로 가정하고 C에서 재정의 된 메서드 m을 호출하려고합니다. cm 표현식은 C'의 구현이 아니라 C의 구현을 활성화합니다. c class == C가 아니라 C '. 당신이 말했듯이, 당신이 D에서 사용할 수있는 "리모트"버전은 없습니다.

원하는 것이 C '에서 메소드를 활성화하는 것이라면, C'에서 m의 소스 코드를 또 다른 방법, 말하자면 m0, 그리고 m '을 m0 (^ self m0)에 위임하도록 C에서 m을 재정의하십시오. m의 메소드 m을 변경하지 않고 m (c m) 대신에 m 0 (c m0)을 사용하여 D로부터 호출한다.

다른 방법으로는 작동하지 않습니다. C0에서 m0을^self m으로 정의하면 표현식 c m0이 C에서 찾지 않은 C의 버전을 활성화합니다.

C에서 m0을^super m으로 정의하면 c m0이 C '>> m을 활성화합니다. 그러나 다른 선택기로 수퍼를 사용하는 것은 좋은 습관으로 간주되지 않으므로 선택하지 않아야합니다.