• 2015.12.22 类的三大特性 协议的简单介绍


    类的三大特性:封装、继承、多态 

    封装:

      1. 对于头文件里面的一些成员变量,可以使用@private @public @protected来限制权限

        @public  公有的 类本身可以访问,子类可以继承,外部也可以访问 pxd->name

        @private 私有的 类本身可以访问,子类无法继承,外部不可以访问

        @protected 受保护的 类本身可以访问, 子类可以继承, 外部不可以访问。默认就是protected

     

        2.需要给外部使用的方法或者属性就定义在头文件里面声明.h

        不需要暴露给外部使用的方法或者属性就在实现文件里面声明.m    

      //匿名扩展
    
          @interface Person ()
    
          @property (nonatomic, strong) NSString *myPassword;
    
          - (void)startDoing;
    
          @end

    继承

      1. 什么情况下需要继承

        当工程中或者系统框架里面已经存在某些类,需要在这些类的基础上添加一些方法或者属性,那么可以选择继承。 

      2.什么是继承

        继承就是无需自己重新定义,就可以获取父类的一些方法或者属性。 

      3.继承里面的一些术语

        父类(超类):被继承的那个类称作父类 super class

        子类            :自己定义的那个类就称做子类

        根类 (root)  :  所有类的父类叫做根类 NSObject 

      4.注意

        OC里面只支持单继承,不能实现多继承 

      5.如何继承一个类(Animal类继承与NSObject)

        @interface Animal : NSObject

        @end 

      6.调用子类的一个方法,如果子类中没有实现,那么会自动到父类里面去寻找,如果找到root类,没有发现,那么报错。 

      7.父类中已经有相关方法的实现,那么子类中需要有自己的实现怎么办?

        override(可以通过重写的方式来实现自己的功能。)

      8.self 和 super

        self: 即将创建的这个对象的指针 是类的一个隐藏属性

        super:它并不是指向父类的一个指针, 是父类的一个标示 

        self编译器会先从当前这个类里面去查找相应的方法或者是属性,如果找不到再去父类中查找

        super 告诉编译器直接去父类中查找 

      9.类型自动向上转换

        TV —> Furniture

        Light —>Furniture 

    @interface Person : NSObject
    
    - (void)turnOn:(Furniture *)fur;
    
    - (void)turnOff:(Furniture *)fur;
    
    @end
    
     
    
    Light *jgd = [[Light alloc] init];
    
    jgd.name = @"客厅的灯";
    
            
    
    TV *xiaomi = [[TV alloc] init];
    
    xiaomi.name = @"小米电视机";
    
            
    
    Person *pxd = [[Person alloc] init];
    
    [pxd turnOn:jgd];
    
    [pxd turnOn:xiaomi];
    
            
    
    [pxd turnOff:xiaomi];
    
    [pxd turnOff:jgd];

    多态:

      同一个方法,拥有不同的实现:

        1. 使用继承的方式实现多态

        2. 使用协议的方式来实现多态 


     

    协议:

      1.如何定义一个协议

        协议只是声明方法(接口),没有具体的实现,谁服从我,谁就实现

     1 /*
     2 
     3 协议以@protocol开始
     4 
     5 AnimalAction 是协议的名字
     6 
     7 <NSObject> 表示AnimalAction协议服从另外一个NSObject协议
     8 
     9 */
    10 
    11 @protocol AnimalAction <NSObject>
    12  
    13 
    14 @required//如果服从我这个协议 下面的方法必须实现
    15 
    16 - (void)eat;
    17 
    18 
    19 @optional//可以选择实现optional下面的方法
    20 
    21 - (void)run;
    22 
    23 - (void)walk;
    24 
    25 - (void)sleep;
    26 
    27 - (void)bite;
    28 
    29 - (void)fly;
    30  
    31 
    32 @end 

    2.如何使用一个协议 

    #import "AnimalAction.h"
    
    @interface Tiger : NSObject<AnimalAction>
     
    @end 
    
    @implementation Tiger
    
    - (void)eat{//必须实现 因为是required修饰的
    
        NSLog(@"我是老虎 我只吃肉");
    
    }
    
    - (void)walk{
    
        NSLog(@"走只是为了发现更好的母老虎");
    
    }
    
    - (void)sleep{
    
        NSLog(@"睡只是为了更好的走");
    
    }
    
    @end
  • 相关阅读:
    mysql 按天创建分区存储过程
    Logstash下载安装使用并日志写入Mysql数据库
    开源BI分析工具Metabase配置与完全使用手册
    MySQL安装之yum安装
    IDEA创建SpringBoot
    JDK环境变量配置
    MySQL存储过程
    定时执行任务
    fastjson的使用——JSON字符串、JSON对象、Java对象的互转
    SQL反模式读书笔记思维导图
  • 原文地址:https://www.cnblogs.com/immustard/p/5068007.html
Copyright © 2020-2023  润新知