OC语言day03-10super

pragma mark super

pragma mark 概念

/**
 // 只需要利用super给父类的方法发送一个消息, 那么系统就会自动调用父类的方法
 // 如果以后想在子类中调用父类的方法 可以使用super
 // 如果想在给父类方法进行扩展 的同时 保留 父类的方法, 那么可以使用super调用父类同名的方法
 
 
 super在类方法中, 一定会调用父类的类方法
 super在对象方法中, 一定会调用父类的对象方法
 可以利用super 在任意方法中 调用父类中的方法
 */

pragma mark 代码

#import <Foundation/Foundation.h>
#pragma mark 类
#import "IPhone.h"
#pragma mark main函数
int main(int argc, const char * argv[])
{
    [IPhone carameWithFlahLightStatus:FlahLightStatusOpen];
    
    IPhone *p = [IPhone new];
    [p carameWithFlahLightStatus:FlahLightStatusOpen];
    
    return 0;
}


Android.h //安卓手机 类 (子类)
#import <Foundation/Foundation.h>
#import "Phone.h"

// 继承了某个类的类 我们称之为子类
@interface Android : Phone


@end
Android.m
#import "Android.h"

@implementation Android

@end

IPhone.h //苹果手机 类 (子类)
#import <Foundation/Foundation.h>

#import "Phone.h"


@interface IPhone : Phone


+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status;

@end
IPhone.m
#import "IPhone.h"

@implementation IPhone

+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status

{
    NSLog(@"聚焦");
    NSLog(@"调光");
    NSLog(@"人脸识别");
#warning 这些代码 跟父类相同 所以只需要 调用父类写好的代码
    /*
    if (status == FlahLightStatusOpen) {
        [self openFlahLight];
    }
    else
    {
        [self closeFlahLight];
    }
    NSLog(@"拍照");
     */
#warning 死循环
//    [self carameWithFlahLightStatus:status];
//    [IPhone carameWithFlahLightStatus:status];
#warning 调用父类的方法
    // 只需要利用super给父类的方法发送一个消息, 那么系统就会自动调用父类的方法
    // 如果以后想在子类中调用父类的方法 可以使用super
    // 如果想在给父类方法进行扩展 的同时 保留 父类的方法, 那么可以使用super调用父类同名的方法
    [super carameWithFlahLightStatus:status];
    
}

- (void)test
{
    /**
     super在类方法中, 一定会调用父类的类方法
     super在对象方法中, 一定会调用父类的对象方法
     可以利用super 在任意方法中 调用父类中的方法
     */
    [super carameWithFlahLightStatus:FlahLightStatusOpen];
}
@end

IPhone.h //手机 类 (父类)
#import <Foundation/Foundation.h>


// 是否打开闪光灯
typedef enum
{
    
    FlahLightStatusOpen,
    kFlahLightStatusClose
    
}kFlahLightStatus;

@interface Phone : NSObject
{
    int _cpu;
}


/**
 *  根据闪光灯的状态拍照
 *
 *  @param status 闪光灯的状态 (开、关)
 */
// 没有使用到成员变量 不需要使用对象方法
// 使用类方法
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status;
- (void)carameWithFlahLightStatus:(kFlahLightStatus)status;

/**
 *  打开闪关灯
 */
+ (void)openFlahLight;
+ (void)closeFlahLight;
@end
IPhone.m
#import "Phone.h"

@implementation Phone


// 没有使用到成员变量 不需要使用对象方法
/**
 类方法中 可以 直接调用 类方法
 类方法中 不可以 直接调用 类方法
 类方法中 不能访问成员变量
 */
- (void)carameWithFlahLightStatus:(kFlahLightStatus)status
{
    NSLog(@"- carameWithFlahLightStatus");
}
+ (void)carameWithFlahLightStatus:(kFlahLightStatus)status
{
    if (status == FlahLightStatusOpen)
    {

        [self openFlahLight];
    }
    else
    {
        [self closeFlahLight];
    }
    NSLog(@"拍照");
}

+ (void)openFlahLight
{
    NSLog(@"打开闪关灯");
}

+ (void)closeFlahLight
{
    NSLog(@"关闭闪关灯");
}
@end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容