B 是 A 类的子类。
A * a = [[B alloc] init];
B * b = [[A alloc] init];
其中哪些是无效的,为什么?
当我输入这个时,我收到了第二件事的警告,但我不明白它的意思。它显示了“使用 'A *' 类型的表达式初始化 'B * __strong' 的不兼容指针类型”。也可能有人告诉我第二个表达式是否有效以及如何做。
如果 B
是 A
的 子类,则它的实例可以在 A
的实例可以使用的任何地方使用使用。反之则不成立。
这是一个使用 Apple 类的真实示例:考虑 NSArray
及其子类 NSMutableArray
。由于NSMutableArray
是一个 NSArray
,所以下面的赋值是有效的:
NSArray *myArray = [[NSMutableArray alloc] init];
但是,由于NSArray
不一定是NSMutableArray
,所以下面的赋值是无效的:
NSMutableArray *myArray = [[NSArray alloc] init];
EDIT 从语言的角度来看,这两个赋值都是有效的:代码将被编译,如果你避开 B
的方法,甚至可以运行A
也不支持,这要归功于Objective C的动态方法分派(dispatch)机制。但是编译器不能再验证涉及变量的代码,并告诉你其他潜在的问题。
关于iphone - 子对象初始化为父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612998/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |