【发布时间】:2011-05-10 16:24:03
【问题描述】:
我有 2 个类,一个包括 methodA,另一个包括 methodB。所以在一个新类中我需要重写方法methodA和methodB。那么如何在Objective C中实现多重继承呢?我对语法有点困惑。
【问题讨论】:
标签: objective-c inheritance multiple-inheritance
我有 2 个类,一个包括 methodA,另一个包括 methodB。所以在一个新类中我需要重写方法methodA和methodB。那么如何在Objective C中实现多重继承呢?我对语法有点困惑。
【问题讨论】:
标签: objective-c inheritance multiple-inheritance
这就是我将 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 不提供或模仿多重继承。
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 吗?在MyClass 上调用methodA: 是否会自动在ClassA 上调用methodA:?