黑马程序员技术交流社区
标题:
最后autorelease那节的代码的一个困惑
[打印本页]
作者:
bubuatt
时间:
2014-4-18 09:11
标题:
最后autorelease那节的代码的一个困惑
本帖最后由 bubuatt 于 2014-4-18 17:09 编辑
父类person中定义了方法
+ (id)person
{
return [[[self alloc] init] autorelease];
}
+ (id)personWithAge:(int)age
{
Person *p = [self person];
p.age = age;
return p;
}
复制代码
子类在调用时
int main(int argc, const char * argv[])
{
@autoreleasepool {
GoodPerson *p = [GoodPerson personWithAge:10];
p.money = 100;
}
return 0;
}
复制代码
Person *p = [self person];
复制代码
这句为什么不用GoodPerson *p = [self person];(这句会报错)
作者:
D调的沉默
时间:
2014-4-18 09:47
这句当然不能用GoodPerson *p = [self person];,首先GoodPerson 是子类,你在父类对象中又没有子类对象的声明,所以不能在父类中使用。
[GoodPerson personWithAge:10];是子类对象调用父类中的方法,子类继承父类,所以子类对象拥有父类对象的全部方法。。
作者:
微尘•逐梦
时间:
2014-4-18 09:54
使用self调用类方法或对象方法,self指向的是调用方法本身的类或对象,使用这个方法首先要有指向的类或对象,GoodPerson *p = [self person];这句代码中的self没有所指的类或对象,所以这样写是不对的。
作者:
李烨
时间:
2014-4-18 14:32
Person *p = [self person]; 这句话技能创建一个Person对象,也能使Person的子类调用返回一个子类的对象。
如果改成GoodPerson那么,只能子类GoodPerson调用,Person和他的其他子类就用不了了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2