У мене є 2 класи, один включає методA, а інший - методB. Тож у новому класі мені потрібно замінити методи 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. Це більше код, але просто не існує багаторазового успадкування як мовної функції у object-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
не повинні надавати чи імітувати багаторазове успадкування.