Saya memiliki 2 kelas satu termasuk methodA dan yang lainnya termasuk methodB. Jadi di kelas baru saya perlu mengganti metode methodA dan methodB. Jadi bagaimana cara mencapai multiple inheritance dalam tujuan C? Saya agak bingung dengan sintaksnya.
Jawaban:
Objective-C tidak mendukung multiple inheritance, dan Anda tidak membutuhkannya. Gunakan komposisi:
@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
Sekarang Anda hanya perlu menjalankan metode pada ivar yang relevan. Ini lebih banyak kode, tetapi tidak ada banyak warisan sebagai fitur bahasa di objektif-C.
ClassA
dan ClassB
? Apakah menyerukan methodA:
pada MyClass
entah bagaimana panggilan secara otomatis methodA:
pada ClassA
?
Ini adalah bagaimana saya mengkodekan singletonPattern sebagai "orang tua" Pada dasarnya saya menggunakan kombinasi protokol dan kategori.
Satu-satunya hal yang tidak dapat saya tambahkan adalah "ivar" baru. Namun, saya dapat mendorongnya dengan objek terkait.
#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
{
}
Setiap kali saya ingin kelas untuk "mewarisi" BGSuperSingleton ini, saya hanya melakukan:
#import "NSObject+singleton.h"
dan tambahkan @interface MyNewClass () <BGSuperSingleton>
Apakah Anda tahu tentang Protokol, protokol adalah cara untuk mengimplementasikan multiple inheritance
JAVA
, Interfaces
tidak untuk memberikan atau meniru beberapa warisan.