美文网首页八天学会OC
第03天OC语言(10):super关键字

第03天OC语言(10):super关键字

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

    super是做什么的

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

    适合所有人,不需要懂的什么

    注:(小白直接上手)

    一、本章笔记
     一.
        只需要利用super 给 父类的方法 发送一个消息, 那么系统就会自动调用父类的方法
        如果以后想在 子类中调用 父类的方法 可以使用super
        如果想在给 父类方法 进行扩展的同时 保留父类的方法, 那么可以使用super调用父类同名的方法
    二.
        super 在类方法中 , 一定会调用父类的类方法
        super 在对象方法中, 一定会调用父类的对象方法
        可以利用super 在任意方法中 调用 父类的方法
    
    二、code
    main.m
    #pragma mark 10-super关键字
    
    #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 test];
        [IPhone carameWithFlahlightStatus:kFlahlightStatusOpen];
        return 0;
    }
    
    
    Phone
    >>>.h
    #import <Foundation/Foundation.h>
    typedef enum
    {
        kFlahlightStatusOpen,
        kFlahlightStatusClose
    }FlahlightStatus;
    @interface Phone : NSObject
    //根据闪光灯的状态拍照
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    - (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    
    // 打开闪光灯
    + (void)openFlashlight;
    // 关闭闪光灯
    + (void)closeFlashlight;
    @end
    
    >>>.m
    #import "Phone.h"
    
    @implementation Phone
    - (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        NSLog(@"-");
    }
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        if (status == kFlahlightStatusOpen)
        {
            [self openFlashlight];
        }
        else
        {
            [self closeFlashlight];
        }
        
        NSLog(@"拍照");
    }
    
    // 打开闪光灯
    + (void)openFlashlight
    {
        NSLog(@"打开闪光灯");
        
    }
    // 关闭闪光灯
    + (void)closeFlashlight
    {
        NSLog(@"关闭闪光灯");
        
    }
    @end
    
    IPhone
    >>>.h
    #import <Foundation/Foundation.h>
    #import "Phone.h"
    
    @interface IPhone : Phone
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status;
    - (void)test;
    @end
    
    >>>.m
    #import "IPhone.h"
    
    @implementation IPhone
    
    
    + (void)carameWithFlahlightStatus:(FlahlightStatus)status
    {
        NSLog(@"聚焦");
        NSLog(@"t调光");
        NSLog(@"人脸识别");
        
        // 由于以下代码 和 父类的一模一样, 所以只需要调用父类写好的代码即可
        /*
        if (status == kFlahlightStatusOpen)
        {
            [self openFlashlight];
        }
        else
        {
            [self closeFlashlight];
        }
        
        NSLog(@"拍照");
         */
        // [self carameWithFlahlightStatus:status]; // 引发死循环
        
        // 只需要利用super 给 父类的方法 发送一个消息, 那么系统就会自动调用父类的方法
        // 如果以后想在 子类中调用 父类的方法 可以使用super
        // 如果想在给 父类方法 进行扩展的同时 保留父类的方法, 那么可以使用super调用父类同名的方法
        [super carameWithFlahlightStatus:status];
    }
    
    - (void)test
    {
        /*
         super 在类方法中 , 一定会调用父类的类方法
         super 在对象方法中, 一定会调用父类的对象方法
         可以利用super 在任意方法中 调用 父类的方法
         */
        [super carameWithFlahlightStatus:kFlahlightStatusOpen];
    }
    @end
    
    Android
    >>>.h
    #import <Foundation/Foundation.h>
    #import "Phone.h"
    @interface Android : Phone
    
    @end
    >>>.m
    #import "Android.h"
    
    @implementation Android
    
    
    @end
    

    相关文章

      网友评论

        本文标题:第03天OC语言(10):super关键字

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