Object-c的三大特性 学习笔记

来源:互联网 发布:网络手机铃声大全试听 编辑:程序博客网 时间:2024/06/06 12:38
学习OC的笔记,记下了分享一下。

Object-C,跟所有的面向对象语言一样,都具有三大特性。

三大特性:封装、继承、多态。
 
A.封装:
    A.1成员变量的封装
    set方法
       作用:提供一个方法给外界设置成员变量值
       规范:方法名必须以set开头。set后面跟上成员变量的名称,成员变量的首字母必须大写。返回值一定是void。一定要接收一个参数,而且参数类型跟成员变量类型一致。形参变量的名称不能和成员变量一样
    get方法:
       作用:返回对象内部的成员变量的值
       规范:方法以get开头,成员变量首字母大写。肯定有返回值,返回值类型肯定与成员变量类型一致。 方法名跟成员变量名一样。不需要接收任何参数。
 
    成员变量的命名规范:一定要以下划线 _开头
            作用:1、让成员变量和get方法的名称区分开。 2、也可以和局部变量区分开。
 
    
A.2弱语法:
   1.没有声明没有实现,调用没有声明的方法编译的时候只有警告。
    只会在运行的时候报错:
    -[Person test]: unrecognized selector sent to instance 0x7fe9804076a0:
        给Person对象发送了一个不能识别的消息:test
 
   2.有声明没有实现:
    如果对象声明了一个方法,但是没有实现,编译的时候同样不会报错,只会有警告。只有在执行的时候会报错(错误和上面的一样)。
    OC是在运行过程中才会检测对象有没有实现相应的方法(动态检测)
 
   3.没有声明有实现:
    这样写的话没有警告,也不会报错。
    程序在运行过程中出错将会闪退。
 
A.3类方法:
    类方法都是以加号(+)开头
    然后调用的时候直接使用类名调用[Person printClassName];
    
    类方法只能使用类名调用,不能使用对象调用。
    允许类方法的方法名和对象方法的方法名相同。
    在类方法中不能访问实例变量。
    
    对象方法:
        1.减号 - 开头
        2.只能通过对象来调用
        3.对象方法中仅能访问当前对象的成员变量
    类方法:
        1.加号 + 开头
        2.只能由类来调用
        3.在类方法中不能访问成员变量
    类方法的好处和使用场合:
        1.能用类方法尽量用类方法
        2.不依赖于对象,执行效率高
        3.场合:当方法内部不需要使用到成员变量时,就可以改为类方法
    
A.4工具类:
    特点:基本没有任何成员变量,里面的方法基本都是类方法。
    
A.5关键字:self
    1.谁调用了当前方法,self就指向谁(self如果出现在对象方法中,self代表对象。self如果出现在类方法中,self就代表类)。
    2.当成员变量和局部变量同名时,采取就近原则,访问的是局部变量,就是方法内部的变量。
    3.在类方法中的self不能调用对象方法,对象方法中的self不能调用类方法。
    4.self不管是在类方法还是对象方法中,如果调用自己,那么就会形成死循环。
    5.用self访问成员变量,区分同名的局部变量。可以使用self->成员变量。
    6.可以利用"self->成员变量名"访问当前对象内部的成员变量。
    7.可以利用[self 方法名];调用其他的对象方法(类)方法。
    8.self不能调用函数。
 
 
B.继承:
    继承的好处:
        1、使代码精简
        2、建立了类之间的关系
        3、子类可以拥有父类中的所有成员变量和方法
    注意点:
        基本上所有类的根类(root class)是NSObject
        如果写在同一个文件中,那么父类必须s要写在前面
        OC中不允许子类和父类拥有相同名称的成员变量
        子类重新实现父类的某个方法,不需要像C#中的需要关键字
        调用某个方法时,优先去当前类中找,如果找不到,就去父类中找。
        每个类中都有一个superclass指针,指向该类的父类
    继承的坏处:耦合性太强了。   
    继承的使用场合:
        1、当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中
        2、当A类拥有B类中的部分属性和方法时,可以考虑让B类继承A类
    
        继承:xx是xxx
        组合:xxx拥有xxx

    组合:

    @interface Score : NSObject    {        int _cScore;        int _ocScore;    }        @end     @implementation Score    @end     @interface Student:NSObject    {        Score *_score;//这种方式就是组合,即一个对象中有另一个对象        int _age;    }    @end    @implementation Student    @end 




关键字:super
        调用父类的方法。(在重写父类的test方法中想调用父类的test方法或者其他方法,使用[super 方法名])
        super处在对象方法中,那么就会调用父类中的对象方法
        super处在类方法中,那么就会调用父类中的类方法   
使用场景:子类重写父类的方法时,想保留父类的一些行为。
       


C.多态
    
    父类指针指向子类对象,没有继承就没有多态,代码的体现:父类类型的指针指向子类对象。
    好处:如果函数\方法参数中使用的是父类类型,可以传入父类、子类对象。
    局限性:父类类型的变量,不能直接调用子类特有的方法,必须强转成子类类型变量后,才能直接调用子类特有的方法。
    调用方法的时候会检测对象的真实形象,如果参数中使用的是父类类型,可以传入父类、子类对象。
 
多态的局限性:父类型的变量,不能调用子类对象的方法。

    //Dog类继承自Animal类    Animal  *a=[Dog new];    Dog  *d=(Dog *)a;//将a转换成Dog *类型的变量后,即可调用dog方法 





0 0
原创粉丝点击