2012-07-04 4 views
0

다음과 같이 메소드를 재정의했습니다. 필자가 작성한 방식이 샘플 용으로 완벽하게 작성되지 않았을 수 있음을 무시하십시오. 그러나 나는 변수 "a"에 대해 이렇게 오버라이드 된 메서드를 사용하면 결과가 무엇인지 알고 싶습니다.iPhone : 결과 덮어 쓰기

-> 기본 클래스

@interface A 
{ 
    int a=15; 
} 
-(int) myFunction; 
@end 

-

@interface B : A 
{ 
    int a=10; 
} 
-(int) myFunction; 
@end 

이미지 "하여 myFunction"수 있습니다 "A"를 반환합니다> 파생 클래스. 내가 좋아 호출하면 때문에

B bObj; 
bObj.a = ? 

어떤 출력 10-15되어야, 방법 오버라이드합니까?

답변

1

나는 머리글에서 변수를 선언 할 수 없다는 것을 알고 있다고 가정하고 단순화를 위해 초기화를하고 있습니다.

마찬가지로, 당신의 B bObj는 초기화되지 및 10. 그래서 [bObj myFunction]을 것 반환 포인터


bObj.a 아닙니다했다. 메서드를 재정의하고이 메서드의 이전 구현을 무시하고 새 메서드를 사용하도록 컴파일러에 지시했습니다.

A *obj = [[B alloc] init]; 
NSLog(@"%d", [obj myFunction]); 

나이 :

당신이의 출력이 될 일을 제안 할 수

B *obj = [[A alloc] init]; 
NSLog(@"%d", [obj myFunction]); 
-1

아동과 부모 모두가 다음의 방법 오버라이드를 반환하는 경우 ...하지만 클래스의 경우 A의 myFunction : A를 반환하고 class b의 myfunction은 B 또는 모든 참조 유형을 반환합니다. 반환 값 유형에는 동일한 의미를 갖는 클래스가 있습니다. 부모와 자식 관계는 다음과 같이 재정의합니다.

+0

이것은 매우 혼란스러운 대답입니다. 나는 그것이 틀린 것도 꽤 확신한다. 메서드를 재정의하고 수퍼 클래스 –

+0

과 동일한 구현을 제공하는 것은 잘못된 것입니다 (구문 적으로는). 실제로 실수로 넣습니다. 미안하지만 .. 나머지는 꽤 명확하고 정확합니다. – Abhishek