码迷,mamicode.com
首页 > 其他好文 > 详细

Objective-C学习笔记

时间:2015-07-18 07:19:59      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:interface   标示   程序 objective-c   

第四章 继承

 继承的语法格式:@interface Circle: NSObject。冒号后边的标示符石需要继承的类。 OC中不支持多继承。 

第一个带有继承的程序

 @interface Shape : NSObject{

 ShapeColor fillColor; ShapeRect bounds;

 }

 -(void) setFillColor : (ShapeColor)fillColor; 

-(void) setBounds : (ShapeBounds)bounds; 

-(void) draw; 

@end//Shape 

@implementation Shape 

-(void) setFillColor : (ShapeColor)c { 

fillColor = c; }//setFillColor

 -(void) setBounds : (ShapeRect)b {

 bounds = b; }//setBounds 

-(void) draw { }//draw 

@end //Shape 

@interface Circle : Shape 

@end//Circle 

@interface Rectangle : Shape 

@end//Rectangle 

实现部分 

@implementation Rectangle

 -(void)draw { 

NSLog(@“ drawing rect at(%d %d %d %d) in %@“,

 bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)); 

}//draw 

@end //Rectangle 

@implementation Circle -(void)draw {

 NSLog(@“ drawing circle at(%d %d %d %d) in %@“, 

bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor)); 

}//draw

 @end //Circle 

有关术语

 超类(superclass)是继承的类。如circle的超类是shape,而shape的超类时NSObject。 

子类(subclass)是执行继承的类。circle时shape的子类,而shape时NSObject的子类。 

如果想改变方法的实现,需要重写(override)继承的方法。 因为继承在子类和超类之间建立了一种“is a”(是一个)的关系,所以NSObject的实例变量叫做isa。即rectangle是一个shape,circle是一个shape。(参考网上他人的见解:isa则相当于java中每个对象的class,就像我们平时写的,XXX.getClass()或XXX.class。OC中的isa指向了其类对象,想一下,我们在java中使用反射时不都是需要取得其类对象嘛!OC也一样,类对象isa也是用在运行时获取对象的类信息的。这样说其实和java中的class概念是一致的。 ) 

使用更具体种类的对象(rectangle和circle)来代替一般类型(shape),这种能力称为多态性。 

每个方法调用都获得了一个名为self的隐藏参数,它是一个指向接收信息的对象的指针。 重写是指在类中声明一个方法,但是让该方法的实现部分为空,然后每个子类都可以实现各自的方法,例如在shape类中的draw方法就是一个例子。 

OC提供了一种super作为关键字的方法,让你即可以重写方法的实现,又能调用超类中的实现的方式。例如:

 @implementation Circle -(void)setFillColor:(ShapeColor)c { if(c==kRedColor){c = kGreenColor;} [super setFillColor:c]; }@end 

请求超类响应信息[super setFillColor:c]并将颜色放入到实例变量中。

super是OC提供的一种神奇的功能,当向super发送消息时,实际上是在请求OC向该类的超类发送消息。如果超类中没有,OC会继续向继承链的上一级中查找。

    第四章到此结束,除了请求超类响应信息这一块难以很好的理解之外,其他的都还可以。从第五章开始,感觉变的不好理解了,有些知识点反复看了几遍还是不能很透彻的理解。。哎

Objective-C学习笔记

标签:interface   标示   程序 objective-c   

原文地址:http://wenran.blog.51cto.com/9428559/1675803

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!