하나는 methodA를 포함하고 다른 하나는 methodB를 포함하는 두 개의 클래스가 있습니다. 따라서 새 클래스에서 methodA 및 methodB 메서드를 재정의해야합니다. 그렇다면 목표 C에서 다중 상속을 어떻게 달성합니까? 구문과 약간 혼동됩니다.
답변:
Objective-C는 다중 상속을 지원하지 않으며 필요하지 않습니다. 사용 구성 :
@interface ClassA : NSObject {
}
-(void)methodA;
@end
@interface ClassB : NSObject {
}
-(void)methodB;
@end
@interface MyClass : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)anA b:(ClassB *)aB;
-(void)methodA;
-(void)methodB;
@end
이제 관련 ivar에서 메소드를 호출하기 만하면됩니다. 더 많은 코드이지만 Objective-C의 언어 기능으로서 다중 상속이 없습니다.
ClassA
와 ClassB
? 호출 하는가 methodA:
에 MyClass
어떻게 든 자동으로 호출 methodA:
에 ClassA
?
이것이 내가 singletonPattern을 "부모"로 코딩하는 방법입니다. 기본적으로 프로토콜과 카테고리의 조합을 사용했습니다.
내가 추가 할 수없는 유일한 것은 새로운 "ivar"이지만 연관된 객체로 푸시 할 수 있습니다.
#import <Foundation/Foundation.h>
@protocol BGSuperSingleton
+(id) singleton1;
+(instancetype)singleton;
@end
@interface NSObject (singleton) <BGSuperSingleton>
@end
static NSMutableDictionary * allTheSingletons;
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
//PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
[result additionalInitialization];
}
return result;
}
-(void) additionalInitialization
{
}
클래스가이 BGSuperSingleton을 "상속"하고 싶을 때마다 다음을 수행합니다.
#import "NSObject+singleton.h"
추가 @interface MyNewClass () <BGSuperSingleton>
프로토콜에 대해 알고 있습니까? 프로토콜은 다중 상속을 구현하는 방법입니다.
JAVA
, Interfaces
제공하거나 모방 다중 상속 할 수 없습니다.