黑马程序员技术交流社区

标题: 万能指针碰上点语法就来问题了 [打印本页]

作者: 葬花桥    时间: 2014-5-5 18:12
标题: 万能指针碰上点语法就来问题了
本帖最后由 葬花桥 于 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;就不行,请问为什么?


作者: jing迪    时间: 2014-5-5 18:22
这是多态~
作者: D调的沉默    时间: 2014-5-5 23:07
版主说的对,那就是oc中的多态,id其实真实类型为NSObject,你自己也可以查头文件看。
然后id类型的car,父类类型的指针指向子类,但是父类类型指针car调用了子类中的方法,而这个方法父类中不存在,当然会有错误了。:#
作者: D调的沉默    时间: 2014-5-5 23:08
补充一下,你可以查看mj老师多态那一节中介绍多态使用时的注意点就知道了,你也可以查看自己的学习笔记哦:victory:
作者: 董月峰    时间: 2014-5-6 07:28
id 类型不能用点语法,记住就行了
作者: 葬花桥    时间: 2014-5-6 12:25
D调的沉默 发表于 2014-5-5 23:07
版主说的对,那就是oc中的多态,id其实真实类型为NSObject,你自己也可以查头文件看。
然后id类型的car,父 ...

但是中括号调用可以啊,我觉得还是楼下说的对,id类型不能用点语法
作者: D调的沉默    时间: 2014-5-6 13:44
葬花桥 发表于 2014-5-6 12:25
但是中括号调用可以啊,我觉得还是楼下说的对,id类型不能用点语法

什么意思中括号可以用?我没说所有的方法都不能用啊,我只说子类的一些方法父类不能用啊,本来id类型就不能用点语法,它只是跟你说了结论,而我跟你说的是原理,是为什么id类型不能调用点语法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2