У меня есть 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. Это больше кода, но в 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
не предоставлять или имитируют множественное наследование.