2010-12-03 100 views
0

是否有可能处理具有不同实例变量类型的类?比方说,我有一个具有两个int实例变量的一类,我们姑且称之为:类的多个实例变量类型?

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

同时我想扩展它给它的可能性来处理这样的实例变量,不同类型,像这样:

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

这甚至有可能吗?

+0

你试过了吗? – 2010-12-03 05:17:21

+0

你为什么不给一个id数据类型给x和y? – 2010-12-03 05:19:02

回答

1

我敢肯定你不能这样做,有两个原因:

  1. 您不能重复实例变量(int x, double x)。
  2. 从一个类继承是非常粗略的,但然后想要改变它的实例变量的类型。

如果您不想为这些用例创建单独的类,那么抽象超类可能会起作用。如果我更多地了解你想要解决的问题,我可以在这方面多一点帮助。

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

1

不会。您会收到“重复成员x”和“重复成员y”的编译时警告。