美文网首页
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