2013-08-15 2 views
0

이 질문을 통해 개체 지향 작동 방식에 대한 내 이해가 올바른지 확인합니다. 몇 가지 메소드가 모두 구현 된 추상 수퍼 클래스가 있다고 가정 해 보겠습니다.올바른 개체 지향 프로그래밍 개념

@interface SuperClass : UIViewController 
- (void)methodOne; 

// Other public stuff 


@end 

....... 그런

@implementation SuperClass 

- (void)methodOne 
{ 
    //some implementation 
} 

- (someObject *)objectMethod 
{ 
    //more implementation 
} 

@end 

내가 그의 서브 클래스 구현하고있는 경우 :

@interface SubClass : SuperClass 

@end 

을 .......

@implementation SubClass 

- (void)methodOne 
{ 
    // override method implementation code 
} 

@end 

위의 예제에서 SubCl 클래스 인 뷰 컨트롤러를 만들면 엉덩이, 그것은 기본적으로 SubClass 객체를 만들고 자동으로 모든 SuperClass 메소드의 구현을 추가 할 것인가? 제가 생각하는 아이디어는 전처리 기가 실행될 때 서브 클래스에서 오버라이드되지 않은 메소드를 취하고 슈퍼 클래스 코드 메소드를 그 클래스에 사용하기 만하면되는 것입니다. 이 경우 나는 super 클래스에서 'methodOne'메서드를 무시하고 'objectMethod'메서드 만 남겼습니다. 내 하위 클래스가 새 재정의 된 'methodOne'구현을 활용하고 SuperClasses의 'objectMethod'구현을 사용한다는 의미입니까?

감사합니다. 내가 뭔가를 명확히해야하는지 알려줘.

답변

3

SubClass 구현에서 methodOne을 다시 정의하면 SubClass의 인스턴스는 재정의 된 구현을 사용합니다. SubClass 구현이 재정의되지 않으면 정의를 위해 SuperClass를 구현합니다. 이 프로세스는 정의를 찾을 때까지 높은 수퍼 클래스를 반복적으로 계속합니다.

-(void) methodOne{ 
    // Some code to add before SuperClass's implementation is called 
    .... 

    // Call SuperClass's implementation 
    [super methodOne]; 

    // Some code to add after SuperClass's implementation is called 
    ... 
} 
+0

대단히 감사합니다! 이것은 정말로 나를 위해 일을 정리하고 있습니다. 또한 관련 질문에 아래에 의견을 게시했습니다. 당신이 그것에 대한 추가적인 통찰력을 가지고 있다면, 나는 그것을 크게 감사 할 것입니다! 다시 한 번 감사드립니다! – Jonathan

1

예. 서브 클래스는 모든 슈퍼 클래스 메소드를 가져옵니다. 하나를 대체하면 해당 메소드는 더 이상 수퍼 클래스 구현을 갖지 않습니다. 따라서이 경우 하위 클래스 인스턴스를 인스턴스화하고 두 메소드 중 하나를 호출 할 때 수퍼 클래스의 objectMethod와 하위 클래스의 methodOne을 가져옵니다.

+0

최고 : 당신이 약간 서브 클래스의 정의를 수정하려는 경우

, 당신은 뭔가를 할 수 있습니다! 제 이해가 정확하다는 것을 기쁘게 생각합니다. 내가 힘든 시간을 보내고있는 또 다른 한 가지는 하위 클래스의 수퍼 클래스 변수를 사용하는 것입니다. 내 구체적인 예에서는 게임을 만들고 SuperClass는 게임이며 게임은 속성으로 인스턴스화됩니다. 내 하위 클래스는 동일한 속성 개체를 사용하는 메서드를 재정의해야하지만 분명히 액세스 할 수는 없습니다. 또한이 건물을 공개 할 수 없습니다. 다른 클래스 속성에 대한 액세스가 필요한 재정의를 제공하려면 어떻게해야합니까? 나는 위임을 사용할 수도 없다. – Jonathan

+0

이 문제에 대한 해결책은 두 가지라고 생각합니다. 1) 속성을 public으로 만듭니다. 그러나 당신이 그렇게 할 수 없다고 말했기 때문에 ... 2) 슈퍼 클래스에서 서브 클래스가 self를 사용하여 호출 할 수있는 일종의 메소드를 만들면 사적인 속성에서 필요한 관련 데이터를 얻을 수 있습니다. int x와 int y를 가지고 있고 그것들을 드러내고 싶지는 않지만 x + y가 필요하다. 계산을 수행하고 그것을 반환하는 public method - (NSInteger) xplusy를 작성하면 서브 클래스에서 사용할 수 있어야한다. ... 아니면 아시다시피 - (NSInteger) x x를 원한다면 x. – AdamG