Objective-C继承应该改变超类中的变量

时间:2012-11-17 14:04:57

标签: objective-c ios macos inheritance

我想创建一个这样的类层次结构: AbstractBaseClass - > SubClass1,AbstractBaseClass - > subClass2 抽象基类应该有2个实例变量(类型id?)和thters变量的setter和getter ......事实是子类1中的变量需要是tpye NSNumber和NSSTring,而在另一个子类中它们都是NSNumber ...我是否只是继承基类并覆盖setter和getter以将NSNumber转换为超类的id?

1 个答案:

答案 0 :(得分:3)

如果在基类中创建id类型属性,则应该能够使用它们来存储任何类型的对象,而无需在子类中执行任何额外操作。

有点奇怪的例子::))

// Base class .h
@interface BaseClass : NSObject
@property (nonatomic, strong) id something;
@end

// Sub class .m
- (id)init {
    self = [super init];
    if (self) {
        BOOL test = (random() > random());
        if (test) {
            [self setValue:@"A string" forKey:@"something"];
        } else {
            [self setValue:@42 forKey:@"something"];
        }
    }
    return self;
}

// Caller
for (int i = 0; i < 5; i++) {
    SubClass *sub = [[SubClass alloc] init];
    NSLog(@"Subclass result: %@", sub.something);
}