黑馬程序員------OC類的封裝 繼承 多態

     ——Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! ——-


類的封裝 


/*

oc語言中使用@interface@implementation來處理類

類的封裝

變量默認只能被當前類的對象方法訪問。*/

//不封裝的缺點:

//當一個類把自己的屬性暴露在外部的時候,那麼該類就會失去對屬性的管理權。



/*

get方法的實現規範

get的方法一定是一個對象方法

get 方法一定有返回值,返回值類型和實例變量的類型一致

get 方法名,是去掉換線的實例變量名

get方法 一定沒有參數

get 方法的實現一定是返回實例變量值,

 

 以後獲取name的值,都同意的使用nameget方法

 -(NSString *)name

 -intage

 //(int)_age;

 -(sex)sex;

 //-(sex)_sex;

*/


#import <Foundation/Foundation.h>

@interface Gun :NSObject   //  對象的聲明

{

    int _bulletcount ;


}

-(void)shoot ;

-(void)setBulletCount;

 @end



@implementation Gun   //對象的實現


-(void)shoot{

    if (_bulletcount > 0){     //調用函數的封裝

    _bulletcount--;

        NSLog(@"tutu...剩餘子彈:%d",_bulletcount );

    }else{

    

        NSLog(@"沒有子彈");

    }


}

-(void)setBulletCount :(int)bulletCont{

    if (bulletCont>0){

        _bulletcount=bulletCont;     //函數的封裝

    }else {

        _bulletcount=0;

        

    }


}


@end

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

    @autoreleasepool {

       

        Gun *gun =[Gun new];


//        gun ->_bulletcount = 3;

        [gun setBulletCount:3];

        

        

        [gun shoot ];

        [gun shoot ];

        [gun shoot ];

        [gun shoot ];

       

    }

    return 0;

}


   類的繼承 



繼承的注意事項

自類不能定義和父類同名的變量,但同時可以繼承父類的變量.


@interface doganimal

{

    int _tuiNum ;

}



oc 繼承體系中的方法調用順序

1、在自己類中找

2、如果如果沒有去父類中找

3、如果父類麼有,還往上找,直到找到爲止,直到基類

4、如果基類(NSObject)中沒有就會報錯




類多態的概念和條件

什麼是多態

多態就是某種事物的多種形態

貓:  貓--》動物

狗:   狗--》動物

男人:男人--》人--》高級動物

女人:女人--》人--》高級動物

程序中的多態:不同的對象以自己的方式相應相同的名稱方法的能力稱爲多態


多態的條件


多態的條件:有繼承關係,有方法重寫


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

代碼體現:用父類類型的指針指向了子類的對象,這就是多態。


多態的優點

     
           多態的主要好處就是簡化了編程的接口,它容許在類和類之間重用一些習慣性的命名。而不用爲每個新加的函數命名一個新的

   名字。這樣,編程接口就是一些抽象的行爲的集合,從而和實現接口的類的區分。

            多態也使得代碼可以區分不同的對象中而不用試圖在一個函數中考慮到所有的對象。這樣的您的代碼擴展性和複用性就會更好    
   些 。當有個新的情景出現時,你就不用把現有的代碼全數更改,而只需要增加一個新的類和新的同名的方法。


多態的注意點


1、如果存在多態,父類是可以訪問子類特有的方法

假設子類Dog有一個特有的方法bark

【dog bark】;

Animal *an2=【Dog new】;

【(Dog*)an2   bark  】;//把父類的指針,強制類型轉換

2、如果不存在多態,父類是不可以訪問子類特有的方法的







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