A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 葬花桥 中级黑马   /  2014-5-5 18:12  /  1373 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 葬花桥 于 2014-5-6 12:28 编辑
  1. #import "Car.h"

  2. int main()
  3. {

  4.     id car = [[Car alloc] init];
  5.     [car setSpeed:10];
复制代码
用了id指针,再用点语法就出错,比如: car.speed = 10;就不行,请问为什么?

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

6 个回复

倒序浏览
这是多态~
回复 使用道具 举报
版主说的对,那就是oc中的多态,id其实真实类型为NSObject,你自己也可以查头文件看。
然后id类型的car,父类类型的指针指向子类,但是父类类型指针car调用了子类中的方法,而这个方法父类中不存在,当然会有错误了。:#
回复 使用道具 举报
补充一下,你可以查看mj老师多态那一节中介绍多态使用时的注意点就知道了,你也可以查看自己的学习笔记哦:victory:
回复 使用道具 举报
id 类型不能用点语法,记住就行了
回复 使用道具 举报 1 0
D调的沉默 发表于 2014-5-5 23:07
版主说的对,那就是oc中的多态,id其实真实类型为NSObject,你自己也可以查头文件看。
然后id类型的car,父 ...

但是中括号调用可以啊,我觉得还是楼下说的对,id类型不能用点语法
回复 使用道具 举报
葬花桥 发表于 2014-5-6 12:25
但是中括号调用可以啊,我觉得还是楼下说的对,id类型不能用点语法

什么意思中括号可以用?我没说所有的方法都不能用啊,我只说子类的一些方法父类不能用啊,本来id类型就不能用点语法,它只是跟你说了结论,而我跟你说的是原理,是为什么id类型不能调用点语法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马