OC-類有三大特性:封裝 繼承 多態

01).封裝

   封裝是將對象的狀態信息隱藏在對象內部,不允許外部程序直接訪問對象內部信息,而是通過該類所提供的方法來實現對內部信息的操作和訪問。簡而言之,信息隱藏,隱藏對象的實現細節,不讓用戶看到,以此來增強安全性和簡化編程,進而達到封裝的目的。
   使用者不必瞭解具體的實現細節,而只是要通過外部接口,以特定的訪問權限來使用類的成員。

訪問修飾符:private、protect、public、Internal

private:私有的,不可供外部訪問的信息,只有類本身能存取.系統默認@private

protect:受保護的,類和派生類可以存取.

Internal:只有同一個項目中的類可以存取.

Public:外部可以直接訪問 person->name = @“jack”;

   //封裝 (setter和getter)成對出現
    - (void)setName:(NSString *)name;//聲明
    - (NSString *)name;//聲明


    - (void)setName:(NSString *)name //實現
    {
        _name = name;
    }
    - (NSString *)name//實現
    {
        return _name;
    }

    [p setName:18];//賦值
    [p name];      //取值

    //只有getter沒有setter,叫做只讀封裝

擴展:如何讓1個方法不被外界訪問,只需要在.m文件中實現這個方法,不需要在頭文件中定義,即只有實現,沒定義.

02).繼承

  OC 的繼承具有 單繼承 的特點,每個子類都只能有一個直接父類。然而,他可以有無限多個間接父類。

當子類繼承父類時,子類可以得到父類的:

1.全部成員變量

2.全部方法

03).多態

  一種事物的多種形態。不同類的對象可以定義共享相同名稱的方法,這個就是多態的表現形式。

實現多態的條件:

1.必須存在繼承關係

2.子類重寫父類的方法

3.父類聲明的變量指向子類對象

OC指針類型的變量有兩個:編譯時類型和運行時類型。編譯時類型由聲明變量時使用的類型決定,運行時類型由實際賦給該變量的對象決定。如果編譯時類型和運行時類型不一致,就可能出現多態。

父類:動物類 HMAnimal.h

#import <Foundation/Foundation.h>

@interface HMAnimal : NSObject
{
    //年齡
    int _age;
}

//吃
-(void)eat;
//跑
-(void)run;

@end

父類:動物類HMAnimal.m

#import "HMAnimal.h"

@implementation HMAnimal

//吃
-(void)eat{

    NSLog(@"動物在吃");

}
//跑
-(void)run{

    NSLog(@"動物會跑");
}

@end

子類:狗狗類 HMDog.h

#import "HMAnimal.h"

@interface HMDog : HMAnimal

//dog類已經有了父類的屬性和行爲

//狗特有的行爲
-(void)lookHome;

@end

子類:狗狗類 HMDog.m

#import "HMDog.h"

@implementation HMDog

//重寫父類的方法
-(void)eat{


    NSLog(@"狗正在吃芝麻醬和紅糖");

}

-(void)run{

    NSLog(@"狗一邊叫,一邊跑");

}

-(void)lookHome{

    NSLog(@"狗會看家");
}

@end

運行 main.m

#import <Foundation/Foundation.h>
#import "HMDog.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {


        HMAnimal *ani1 = [HMDog new];//父類指針指向子類對象,這就是多態
        [ani1 eat]; //運行結果由實際賦給該變量的對象決定
        [ani1 run];

    }
    return 0;
}

2017-06-20 23:17:15.450844+0800 多態[2295:564455] 狗正在吃芝麻醬和紅糖
2017-06-20 23:17:15.451833+0800 多態[2295:564455] 狗一邊叫,一邊跑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章