• oc64--协议2@protocol


    //
    //  SportProtocol.h
    //  day17
    //
    
    #import <Foundation/Foundation.h>
    
    @protocol SportProtocol <NSObject>  //NSObject是默认的协议类,每个协议都要继承NSObject基协议。不写也可以。
    
    // 1.协议只能声明方法, 不能声明属性(跟分类一样)
    //{
    //    int  _age;
    //}
    
    // 方法声明列表
    // 2.注意: 如果没有使用任何关键字修饰协议中的方法, 那么该方法默认就是required的
    @required
    // 如果协议中的方法是@required的, 而遵守协议的类又没有实现该方法, 那么会报一个警告(不是报错)
    - (void)playFootball;
    
    @optional // 可选
    // 3.如果协议中的方法是@optional的, 而遵守协议的类又没有实现该方法, 那么不会报警告
    - (void)playBasketball;
    - (void)playBaseball;
    // 注意:@required和@optional仅仅使用程序员之间交流, 并不能严格的控制某一个遵守该协议的类必须要实现该方法, 因为即便不是实现也不会报错, 只会报一个警告,
    
    
    //废材一个废材一个。废材一个废材一个废材一个废材一个废材一个废材一个。
    
    
    @end
    //
    //  CrazySportProtocol.h
    //  day17
    
    #import <Foundation/Foundation.h>
    #import "SportProtocol.h"
    
    // 4.OC中的协议又可以遵守其它协议, 只要一个协议遵守了其它协议, 那么这个协议中就会自动包含其它协议的声明
    @protocol CrazySportProtocol <SportProtocol>
    // 跳舞
    - (void)jumping;
    @end
    //
    //  StudyProtocol.h
    //  day17
    
    #import <Foundation/Foundation.h>
    
    @protocol StudyProtocol <NSObject>
    
    - (void)study;
    @end
    //
    //  Person.h
    //  day17
    
    #import <Foundation/Foundation.h>
    #import "SportProtocol.h"
    #import "StudyProtocol.h"
    
    // 3.在OC中一个类可以遵守1个或多个协议
    // 注意: OC中的类只能有一个父类, 也就是说OC只有单继承(如果2个父类有同名的方法,那么子类就不知道调用哪个方法了。如果父类和爷爷类有同名的方法,子类调用会先去父类找,找不到再去爷爷类找。)
    @interface Person : NSObject<SportProtocol, StudyProtocol>
    
    @end
    //
    //  Person.m
    //  day17
    
    
    #import "Person.h"
    
    @implementation Person
    - (void)playFootball
    {
        NSLog(@"%s", __func__);
    }
    
    //- (void)playBasketball    如果是required,而没有实现,
    //{
    //    NSLog(@"%s", __func__);
    //}
    //
    //- (void)playBaseball
    //{
    //    NSLog(@"%s", __func__);
    //}
    
    - (void)study
    {
        NSLog(@"%s", __func__);
    }
    @end
    //
    //  Sutdent.h
    //  day17
    
    #import "Person.h"
    
    // 5.父类遵守了某个协议, 那么子类也会自动遵守这个协议(也有方法的声明)。
    @interface Sutdent : Person
    
    @end
    //
    //  Sutdent.m
    //  day17
    
    
    #import "Sutdent.h"
    
    @implementation Sutdent
    
    - (void)playBasketball
    {
        NSLog(@"%s", __func__);
    }
    @end
    //
    //  main.m
    //  protocol注意点
    //
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    #import "Sutdent.h"
    
    int main(int argc, const char * argv[]) {
    
        Person *p = [Person new];
        [p playBasketball];
        [p study];
        
        Sutdent *stu = [Sutdent new];
        [stu playBasketball];
        
        return 0;
    }
  • 相关阅读:
    zoj3430Detect the Virus(ac自动机)
    zoj3494BCD Code(ac自动机+数位dp)
    hdu3247Resource Archiver(ac自动机+spfa)
    hdu3341Lost's revenge(ac自动机+dp)
    hdu4511小明系列故事——女友的考验(ac自动机+最短路)
    hdu4758Walk Through Squares(ac自动机+dp)
    数论一
    母函数专题
    KMP专题
    3级算法题
  • 原文地址:https://www.cnblogs.com/yaowen/p/7436970.html
Copyright © 2020-2023  润新知