좋습니다, 그래서 Objective-C를 사용하고 있습니다. 자, 내가 가지고 말 :Obj-c 메서드 재정의/다형성 문제
TopClass : NSObject
- (int) getVal {return 1;}
MidClass : TopClass
- (int) getVal {return 2;}
BotClass : MidClass
- (int) getVal {return 3;}
나는 다음 NSMutableArray에 개체를 넣고 밖으로 데리고. 내가 적절한 개체 유형에 GETVAL의 FUNC를 실행하고 싶은,하지만 난
id a = [allObjects objectAtIndex:0];
if ([a isKindOfClass:[TopClass class]])
{
int i;
i = [a getVal];
}
을 넣을 때 컴파일러는 실제 개체 유형을 판별 할 수 아마도 때문에 내가 먼저 GETVAL (라고 여러 방법에 대한 경고가 런타임까지). 하지만 더 진지하게 나는 "무언가가 무시되어서는 안되는 무효 값"이라는 오류가 발생하고 컴파일되지 않습니다.
[a getVal]의 반환 값을 사용하지 않으면 예를 들어 잘 컴파일됩니다.
[a getval]; //obviously no good if I want to use the return value
isMemberOfClass 문을 사용하여 함수를 실행하기 전에 클래스에 객체를 캐스팅하는 경우에도 작동합니다.
if ([a isMemberOfClass:[BotClass]) i = [(BotClass*) a getVal];
하지만 꼭 필요한 기능을 사용해서는 안됩니다. 그렇지 않으면 모든 단일 하위 클래스에 대한 성명서를 작성해야하며, 새 하위 클래스를 추가하는 경우 새 줄을 추가해야합니다. 새 하위 클래스를 추가하면 메서드 오버라이드 점이 무의미합니다.
분명히 더 좋은 방법이 있습니까?
Objective-C'-getSomething'에서 메소드의 이름을 지정하면 안됩니다. 이름을'-something'으로 지정하십시오. –