类的多个实例变量类型?

时间:2010-12-03 05:05:24

标签: objective-c

是否可以处理具有不同实例变量类型的类?假设我有一个有两个int实例变量的类,让我们调用它们:

@interface ClassA: NSObject {
  int x;
  int y;
}
@end

同时我想扩展它,使它有可能在这样的实例变量上处理不同的类型:

@interface ClassB: ClassA {
  double x;
  double y;
}

这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

我很确定你不能这样做有两个原因:

  1. 您无法重复实例变量(int x, double x)。
  2. 从一个类继承是非常粗略的,但后来想要更改其实例变量的类型。
  3. 如果您不想为这些用例创建单独的类,那么抽象的超类可能会起作用。如果我更多关于你想要解决的问题,我将能够在这方面提供更多帮助。

    您真正想要的是参数多态,Objective-C不支持。某些Cocoa类,如NSNumber系列,使用具有许多具体子类的抽象超类,可能具有不同的实例变量布局(就像您在问题中描述的那样)。然后,在抽象和特定之间适当地划分逻辑。这是Cocoa的类集群设计模式,它是对C ++和Haskell等语言的参数多态性的一种削弱的特殊答案。

答案 1 :(得分:1)

没有。您收到编译时警告“重复成员'x'”和“重复成员'y'”。