美文网首页八天学会OC
第03天OC语言(09):继承其它特性

第03天OC语言(09):继承其它特性

作者: liyuhong | 来源:发表于2017-07-20 16:10 被阅读5次
    • 不要等到明天,明天太遥远,今天就行动。
    须读:看完该文章你能做什么?

    知道继承的特性(调用方法顺序)

    学习前:你必须会什么?(在这里我已经默认你具备C语言的基础了)

    什么是继承

    注:(小白直接上手)

    一、本章笔记
     一.
      如果子类中 有父类中同名的方法,那么我们称之为方法重写
      注意: 继承中的方法调用顺序, 如果自己有 就调用自己的,如果自己没有调用父类的
      **方法的调用顺序, 先自己再父类, 如果父类中没有 再找爷爷类,如果爷爷类再没有 就找 爷爷的爸爸类
          如果一直找到 NSObject类没有找到, 那么就会报错
         Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[IPhone signalWithNumber:]: unrecognized selector sent to instance 0x1002000b0'
     二.
      在继承中除了 对象方法可以重写,类方法也可以重写
     三.
      注意 : 在继承中方法可以重写,但是属性(成员变量)不能重写
    
     四.
     继承:
        当B类 继承 A类, 那么B类 就拥有 A类所有的属性和方法(类方法/对象方法)
     优点:
         提高代码的复用性(重复的代码)
         可以让类与类之间产生关系,正是因为  继承让类与类之间 产生了关系 所以才有了多态
     缺点:
         耦合性太强(依赖性太强) 也就是说 比如有一天我的Phone类删掉了,那么其他的子类就不能使用了
     
     注意:
         不要以为继承可以提高代码的复用性, 以后但凡发现多个类当中 有重复代码 就抽取一个父类
         只有满足一定的条件 才能使用继承
         条件 : xxx 是 xxx / 某某某 is a 某某某
     学生 :
         姓名
         年龄
         数学成绩
         语文成绩
         英语成绩
     排行榜:
         数学成绩
         语文成绩
         英语成绩
     分数类:
         数学成绩
         语文成绩
         英语成绩
    
    二、code
    main.m
    #pragma mark 09-继承其它特性
    #pragma mark - 代码
    #import <Foundation/Foundation.h>
    #pragma mark 类
    #import "IPhone.h"
    #pragma mark - main函数
    int main(int argc, const char * argv[])
    {
        IPhone *p  = [IPhone new];
        [p signalWithNumber:@"10010"];
        [IPhone brand];
    
        return 0;
    }
    
    
    Phone
    >>>.h
    #import <Foundation/Foundation.h>
    @interface Phone : NSObject
    {
        int _cpu;
    }
    // 打电话
    - (void)signalWithNumber:(NSString *)number;
    // 发短信
    - (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content;
    // 打印品牌信息
    + (void)brand;
    @end
    >>>.m
    #import "Phone.h"
    
    @implementation Phone
    - (void)signalWithNumber:(NSString *)number
    {
        NSLog(@"利用手机打电话给%@",number);
    }
    - (void)sendMessageWithNumber:(NSString *)number andContent:(NSString *)content
    {
        NSLog(@"利用手机发短信给%@,内容是%@",number,content);
    }
    + (void)brand
    {
        NSLog(@"品牌");
    }
    @end
    
    iPhone
    >>>.h
    #import <Foundation/Foundation.h>
    #import "Phone.h"
    
    @interface IPhone : Phone
    {
        // 注意 : 在继承中方法可以重写,但是属性(成员变量)不能重写
    //    int _cpu; // duplicate member 'cpu'
    }
    - (void)setCpu:(int)cpu;
    - (int)cpu;
    
    // 打电话
    // 如果子类中 有父类中同名的方法,那么我们称之为方法重写
    // 注意: 继承中的方法调用顺序, 如果自己有 就调用自己的,如果自己没有调用父类的
    // 方法的调用顺序, 先自己再父类, 如果父类中没有 再找爷爷类,如果爷爷类再没有 就找 爷爷的爸爸类
    // 如果一直找到 NSObject类没有找到, 那么就会报错
    //Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[IPhone signalWithNumber:]: unrecognized selector sent to instance 0x1002000b0'
    - (void)signalWithNumber:(NSString *)number;
    
    // 在继承中除了 对象方法可以重写,类方法也可以重写
    + (void)brand;
    
    @end
    >>>.m
    #import "IPhone.h"
    
    @implementation IPhone
    - (void)setCpu:(int)cpu
    {
        _cpu = cpu;
    }
    - (int)cpu
    {
        return _cpu;
    }
    - (void)signalWithNumber:(NSString *)number
    {
        NSLog(@"利用 iPhone打电话给%@",number);
    }
    + (void)brand
    {
        NSLog(@"iphone手机");
    }
    @end
    
    
    Android
    >>>.h
    #import <Foundation/Foundation.h>
    #import "Phone.h"
    @interface Android : Phone
    - (void)setCpu:(int)cpu;
    - (int)cpu;
    @end
    >>>.m
    @implementation Android
    - (void)setCpu:(int)cpu
    {
        _cpu = cpu;
    }
    - (int)cpu
    {
        return _cpu;
    }
    
    @end
    

    image.png image.png

    相关文章

      网友评论

        本文标题:第03天OC语言(09):继承其它特性

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