美文网首页
ios Objective-C 4.0继承

ios Objective-C 4.0继承

作者: Lost_Robot | 来源:发表于2018-07-04 14:01 被阅读5次

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

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

相关文章

网友评论

      本文标题:ios Objective-C 4.0继承

      本文链接:https://www.haomeiwen.com/subject/esgduftx.html