zoukankan      html  css  js  c++  java
  • 黑马程序员__OC三大特性

    三大特性

    封装

    封装是把成员变量包装起来,不让外界直接访问。根据成员变量的作用域,默认都是protect类型的。

    set 和get方法

    有时候我们必须要访问成员变量,但是成员变量被封装起来了,这时候我们就可以用set或者get方法来间接访问成员变量,这样可以确保数据的安全性

     1 #import <Foundation/Foundation.h>
     2 
     3 @interface Score : NSObject
     4 {
     5     int _cScore; // C语言成绩
     6     int _ocScore; // OC成绩
     7     
     8     int _totalScore;// 总分
     9     int _averageScoe; // 平均分
    10 }
    11 
    12 - (void)setCScore:(int)cScore;
    13 - (int)cScore;
    14 
    15 - (void)setOcScore:(int)ocScore;
    16 - (int)ocScore;
    17 
    18 - (int)totalScore;
    19 - (int)averageScore;
    20 
    21 @end
    22 
    23 @implementation Score
    24 - (void)setCScore:(int)cScore
    25 {
    26     _cScore = cScore;
    27     
    28     // 计算总分
    29     _totalScore = _cScore + _ocScore;
    30     _averageScoe = _totalScore/2;
    31 }
    32 - (int)cScore
    33 {
    34     return _cScore;
    35 }
    36 
    37 - (void)setOcScore:(int)ocScore
    38 {
    39     _ocScore = ocScore;
    40     
    41     // 计算总分
    42     _totalScore = _cScore + _ocScore;
    43     _averageScoe = _totalScore/2;
    44 }
    45 // 监听成员变量的改变
    46 
    47 - (int)ocScore
    48 {
    49     return _ocScore;
    50 }
    51 
    52 - (int)totalScore
    53 {
    54     return _totalScore;
    55 }
    56 - (int)averageScore
    57 {
    58     return _averageScoe;
    59 }
    60 @end

    说明:

    1.get方法是返回成员变量的,所有返回类型和成员变量的类型是一样的

    2.sef方法是访问成员变量的值,或者修改成员变量的值,没有返回值,所有用(void)

    3.set和get都是对象方法,所有都应该用-号开头

    4.如果一个类基本没有任何的成员变量,里面的方法都是类方法,我们成为工具类

    5.经典错误:unrecognized selector sent to instance 0x7fd2ea4097c0  不能是识别的消息发送了某个对象,0x7fd2ea4097c0 表示对象的地址

    继承

    使用场合

     1> 当两个类拥有相同属性和方法的时候,就可以将相同的东西抽取到一个父类中

     2> 当A类完全拥有B类中的部分属性和方法时,可以考虑让B类继承 A类

    继承的好处:

     1> 抽取重复代码

     2> 建立了类之间的关系

     3> 子类可以拥有父类中的所有成员变量和方法

    坏处:

    子类和父类的耦合性太大

    注意点

     1> 基本上所有类的根类是NSObject

     2>  重写:子类重新实现父类中的某个方法,覆盖父类以前的做法

     3> 父类必须声明在子类的前面

     4> 子类不能拥有和父类相同的成员变量

     5> 调用某个方法时,优先去当前类中找,如果找不到,去父类中找

    多态

    定义:

    多态指的是父类指针指向了子类对象

    Dog *d = [Dog new]

    Animal *a = [Dog new]

    上面的例子中Dog是Animal的子类,对象a就是有多种形态,可以说是Dog类型的,也可以说是Animal内省的,调用方法时会检测对象的真实形象

    说明

     1.没有继承就没有多态

     2.代码的体现:父类类型的指针指向子类对象

     3.好处:如果函数方法参数中使用的是父类类型,可以传入父类、子类对象

     4.局限性:

      父类类型的变量 不能 直接调用子类特有的方法。必须强转为子类类型变量后,才能直接调用子类特有的方法

    补充 :self 和super

    self:指向方法的调用者,代表着当期的对象,一般用在方法的实现中。如果用在对象方法中self就代表一个对象,如果用在类方法中,self就代表着一个类

    在对象方法利用"self->成员变量名"访问当前对象内部的成员变量

    [self 方法名]可以调用其他对象方法类方法

    super

    作用;1直接调用父类的某个方法

           

        2.super处在对象方法中,那么就会调用父类的对象方法

          super处在类方法中,那么就会调用父类的类方法

        3.使用场合:子类重写父类的方法时想保留父类的一些行为

  • 相关阅读:
    ReentrantLock的实现语义与使用场景
    队列同步器详解
    设计模式--模板方法模式
    Synchronized及其实现原理
    JAVA线程基础
    JAVA内存模型
    java 线上问题定位工具
    JMX超详细解读
    Hexo
    [转]html5 video在安卓大部分浏览器包括微信最顶层的问题
  • 原文地址:https://www.cnblogs.com/jia694600474/p/4008398.html
Copyright © 2011-2022 走看看