黑马程序员技术交流社区

标题: id使用 [打印本页]

作者: Lxy    时间: 2014-10-21 20:41
标题: id使用
        Person * p = [Person new];
        id p1 = [Person new];
        [p1 setAge:10];
        NSLog(@"%d", [p1 age]);
        //NSLog(@"%d", p1.age); // 会报错,为什么???求大师指点
        NSLog(@"%d", p.age);// 这个就OK




作者: duzhong    时间: 2014-10-21 21:16
你 NSLog(@"%d", [p1 age]);  后面括号里的是什么[P1 age]?
作者: 弹琴骚年    时间: 2014-10-21 21:49
id类型的变量不能用点语法的
作者: 冯大卫    时间: 2014-10-22 02:01
id 相当于NSObject *  多态 你用父类指针指向子类特有的成员变量  但是编译器在ID类型中没有找到这个成员变量  一般需要强制转换成Person对象
  1.     id p1=[[person alloc]init];
  2.     person *p2=(person *)p1;
  3.     p2.age=10;
  4.     NSLog(@"p2.age = %d",p2.age);
复制代码

作者: 哈利梅    时间: 2014-10-22 08:41
这个肯定可以的,你再看看视频,完全是和视频里面一样的写法怎么会不行呢,如果不说不一样的地方,那就是你没有写age的set和get方法,你添加一下试试~~
作者: wehuazi    时间: 2014-10-22 09:47
父类的调用子类的,报错正常啊
作者: Lxy    时间: 2014-10-22 12:26
弹琴骚年 发表于 2014-10-21 21:49
id类型的变量不能用点语法的

为什么?哪里讲到的?
作者: Lxy    时间: 2014-10-22 12:27
冯大卫 发表于 2014-10-22 02:01
id 相当于NSObject *  多态 你用父类指针指向子类特有的成员变量  但是编译器在ID类型中没有找到这个成员变 ...

NSLog(@"%d", [p1 age]);
为毛这句就可以啊?
作者: 弹琴骚年    时间: 2014-10-23 00:17
Lxy 发表于 2014-10-22 12:26
为什么?哪里讲到的?

教学视频的0808作业的答案里就讲到了
作者: Lxy    时间: 2014-10-23 01:29
弹琴骚年 发表于 2014-10-23 00:17
教学视频的0808作业的答案里就讲到了

嗯,谢谢!




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