美文网首页
深入浅出Objective-C笔记(五)

深入浅出Objective-C笔记(五)

作者: 无聊的呆子 | 来源:发表于2015-11-19 15:56 被阅读31次

    类的继承


    • 继承反映的是类之间的相似性

    圆形类

    @interface Circle : NSObject
    {
      double x;
      double y;
      CGColorRef lineColor;
      CGColorRef fillColor;
    
      double radius;
    }
    
    - (void)moveToX:(double)x Y:(double)y;
    - (void)setLineColor:(CGColorRef)lineColor;
    - (void)setFillColor:(CGColorRef)fillColor;
    
    - (void)setRadius:(double)r;
    @end 
    

    矩形类

    @interface Rectangle : NSObject
    {
      double x;
      double y;
      CGColorRef lineColor;
      CGColorRef fillColor;
    
      double width;
      double height;
    }
    
    - (void)moveToX:(double)x andY:(double)y;
    - (void)setLineColor:(CGColorRef)lineColor;
    - (void)setFillColor:(CGColorRef)fillColor;
    
    - (void)setWidth:(double)w;
    - (void)setHeight:(double)h;
    @end
    

    对比圆形类跟矩形类,发现有很多重复的部分。

    ** 继承反映的是类之间的相似性 **

    形状类

    @interface Shape : NSObject
    {
      double x;
      double y;
      CGColorRef lineColor;
      CGColorRef fillColor;
    }
    
    - (void)moveToX:(double)x andY:(double)y;
    - (void)setLineColor:(CGColorRef)lineColor;
    - (void)setFillColor:(CGColorRef)fillColor;
    
    @end 
    
    • 什么是继承?

    如果类B继承了类A,那么B会包含A的所有属性和方法。

    如果圆形类和矩形类都继承了形状类,那么很多属性跟方法就不用再写一遍。

    • 使用继承来写Circle类
      @interface Circle : Shape
      {
          double radius;
      }
      - (void)setRadius:(double)r;
      @end
    
      Circle类继承了Shape类,代码精简了很多,重复的部分都不用写了。
    
    • 使用继承来写Rectangle类
      @interface Rectangle : Shape
      {
        double width;
        double height;
      }
      - (void)setWidth:(double)w;
      - (void)setHeight:(double)h;
      @end    
      
      使用继承,只要写自己类特有的属性跟方法即可。
    
    • 基类/父类   派生类/子类

    • NSObject类
      ObjC的类都继承NSObject类

    • 完整实现一个例子

    父类Shape类
    #import <Foundation/Foundation.h>

      @interface Shape : NSObject {
            double xCoord;
            double yCoord;
            CGColorRef lineColor;
            CGColorRef fillColor;
      }
    
      - (void)moveToX:(double)x andY:(double)y;
      - (void)setLineColor:(CGColor)lineColor;
      - (void)setFillColor:(CGColor)fillColor;
    
      @end 
    
      @implementation Shape
       -(id)init {
            self = [super init];
            if (self) {
                xCoord = 0.0;
                yCoord = 0.0;
                lineColor = NULL;
                fillColor = NULL;
            }
            return self;
      }
    
      - (void)moveToX:(double)x andY:(double)y {
          xCoord = x;
          yCoord = y;
      }
    
      - (void)setLineColor:(CGColor)color {
          lineColor = color;
      }
    
      - (void)setFillColor:(CGColor)color {
          fillColor = color;
      }
    
      @end 
    

    子类Circle类

    @interface Circle : Shape {
        double radius;
    }
    
    - (void)setRadius:(double)r;
    @end
    
    @implementation Circle {
    - (id)init {
        self = [super init];//注意,因为继承自Shape类,所以这里的super指的是Shape类
        if (self) {
            radius = 0.0;//只用初始化Circle类特有的半径变量
        }
        return self;
    }
    
    - (void)setRadius:(double)r {
          radius = r;
    }
    @end 
    

    子类Rectangle类

    @interface Rectangle : Shape {
        double width;
        double height;
    }
    - (void)setWidth:(double)w;
    - (void)setHeight:(double)h;
    @end
    
    @implementation Rectangle {
    - (id) init {
        self = [super init];//实现部分不要忘了第一步是初始化!
        if (self) {
            width = 0.0;
            height = 0.0;
        }
        return self;
    }
    - (void)setWidth:(double)w {
        width = w;
    }
    - (void)setHeight:(double)h {
        height = h;
    }
    @end 
    

    相关文章

      网友评论

          本文标题:深入浅出Objective-C笔记(五)

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