• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - 子对象初始化为父对象

[复制链接]
菜鸟教程小白 发表于 2022-12-13 12:04:24 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

B 是 A 类的子类。

A * a = [[B alloc] init];
B * b = [[A alloc] init];

其中哪些是无效的,为什么?

当我输入这个时,我收到了第二件事的警告,但我不明白它的意思。它显示了“使用 'A *' 类型的表达式初始化 'B * __strong' 的不兼容指针类型”。也可能有人告诉我第二个表达式是否有效以及如何做。



Best Answer-推荐答案


如果 BA子类,则它的实例可以在 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap