ios Objective-C 4.0继承

继承是在两个类之间建立关系的一种方式,它可以避免许多重复的代码。建立类之间的关系也可以通过复合的方式。

1.继承的语法和格式

@interface  Circle:NSObject

注意:

  • Object-C 不支持多继承
  • 多继承的效果,需要使用其他的cocoa特性来实现eg:类别category,协议protocol

头文件:

@interface  Shape:NSObject{
    int  fillColor;
    int  bounds;
}
-(void) setFillColor:(int)fillColor;
-(void) setBounds:(int)bounds;
-(void) draw;
@end


@interface  Circle:Shape
-(void) setFillColor:(int)fillColor;
-(void) setBounds:(int)bounds;
-(void) draw;
@end

@interface  Rectangle:Shape
-(void) setFillColor:(int)fillColor;
-(void) setBounds:(int)bounds;
-(void) draw;
@end

实现文件:

@implementation  Shape
-(void) setFillColor:(int)color{
    
    fillColor = color;
    
};

-(void) setBounds:(int)bs{
    
    bounds = bs;
};

-(void) draw{
    
};
@end

@implementation  Circle
-(void) draw{
    
    NSLog(@"drawing a circle at (%d %d)",fillColor,bounds);
    
};
@end

@implementation  Rectangle
-(void) draw{
    
    NSLog(@"drawing a rectangle at (%d %d)",fillColor,bounds);
    
};
@end

2.相关术语

  • 超类 superclass 是继承的类,此处指Shape;
  • 父类 parent class 是超类的另一种说法;
  • 子类 subclass 是执行继承的类;Circle,Rectangle;
  • 孩子类 child class 同子类;
  • 如果想改变方法的实现,需要重写override继承的方法;如draw方法就有各自的实现;

3.继承的工作机制

  • 方法的调度:先查找对象类文件中的查找,没有找到则会往超类中查找;必要时会在继承链中的每一个类中去执行此操作;
  • 实例变量:编译器使用“基地址加偏移”的机制实现变量的寻址,偏移位置是通过硬编码是吸纳。self->isa参数.

4.重写方法

当新类继承父类的时候,可以重写父类已经实现的方法,这样当新类的对象的方法调度机制将会运行新类中重写的方法。

  • 不重写方法,方法调度时直接使用父类中的方法实现;
  • 重写方法,方法调度时直接使用子类中的方法实现;
  • 使用super关键字,这样既可以重写方法,又可以使用父类中的方法实现,调用继承链中最近的一个super的方法,直到找到为止;

@implementation  Circle
-(void) setFillColor:(int)color{

    int  kRed = 100;
    int  kGreenColor = 200;
    if(color == kRed){
        color = kGreenColor;
    }
    
    [super setFillColor:c]; 
    
};
-(void) draw{
    
    NSLog(@"drawing a circle at (%d %d)",fillColor,bounds);
    
};
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,532评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 静下心来想写写我家黄毛丫头时,脑中跳出两个字"主见"。 她有主见,从小看大,不足2岁,就开始去超市自己挑衣...
    悦糖糖阅读 219评论 0 1
  • 1、实现文字在div底部法一:定位解决法二:? 2、文字三面环绕图片? 3、font-family设置 4、段落间...
    飞飞廉阅读 332评论 0 1