Eu tenho 2 classes, uma inclui o métodoA e a outra inclui o métodoB. Portanto, em uma nova classe, preciso substituir os métodos methodA e methodB. Então, como faço para obter herança múltipla no objetivo C? Estou um pouco confuso com a sintaxe.
Respostas:
Objective-C não oferece suporte a herança múltipla e você não precisa dela. Use composição:
@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
Agora você só precisa invocar o método no ivar relevante. É mais código, mas simplesmente não há herança múltipla como um recurso de linguagem em objetivo-C.
ClassA
e ClassB
? Faz chamar methodA:
em MyClass
alguma forma chamar automaticamente methodA:
em ClassA
?
É assim que codifico singletonPattern como "um pai". Basicamente, usei uma combinação de protocolo e categoria.
A única coisa que não posso adicionar é um novo "ivar", no entanto, posso empurrá-lo com o objeto associado.
#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
{
}
Sempre que quero que uma classe "herde" este BGSuperSingleton, eu simplesmente faço:
#import "NSObject+singleton.h"
e adicione @interface MyNewClass () <BGSuperSingleton>
Você conhece os protocolos, os protocolos são a maneira de implementar a herança múltipla
JAVA
, Interfaces
não devem fornecer ou simular herança múltipla.