Mam 2 klasy, jedna zawiera MethodA, a druga zawiera MethodB. Więc w nowej klasie muszę zastąpić metody MethodA i MethodB. Jak więc osiągnąć wielokrotne dziedziczenie w celu C? Jestem trochę zdezorientowany ze składnią.
88
Mam 2 klasy, jedna zawiera MethodA, a druga zawiera MethodB. Więc w nowej klasie muszę zastąpić metody MethodA i MethodB. Jak więc osiągnąć wielokrotne dziedziczenie w celu C? Jestem trochę zdezorientowany ze składnią.
Objective-C nie obsługuje dziedziczenia wielokrotnego i nie jest to potrzebne. Użyj kompozycji:
@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
Teraz wystarczy wywołać metodę na odpowiednim ivar. To więcej kodu, ale po prostu nie ma wielokrotnego dziedziczenia jako funkcji języka w celu-C.
ClassA
iClassB
? Czy dzwoniącmethodA:
naMyClass
jakoś automatycznie zadzwonimethodA:
naClassA
?Tak koduję singletonPattern jako „rodzica”. Zasadniczo użyłem kombinacji protokołu i kategorii.
Jedyne, czego nie mogę dodać, to nowy "ivar", ale mogę go wcisnąć z powiązanym obiektem.
#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 { }
Ilekroć chcę, aby klasa „odziedziczyła” ten BGSuperSingleton, po prostu robię:
#import "NSObject+singleton.h"
i dodaj
@interface MyNewClass () <BGSuperSingleton>
źródło
Czy wiesz o protokołach, protokoły są sposobem implementacji wielokrotnego dziedziczenia
źródło
JAVA
,Interfaces
nie są do świadczenia lub naśladować wielokrotne dziedziczenie.