日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC-封装、继承、多态

發布時間:2023/12/19 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OC-封装、继承、多态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面向對象的三大特征:封裝、繼承、多態

1.封裝

什么是封裝:在程序上,隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將對象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。

1> set方法
① 作用:提供一個方法給外界設置成員變量值,實現對參數的相應過濾

② 命名規范

   *方法名必須以set開頭

   *set后面跟上成員變量的名稱,成員變量名首字母必須大寫

   *返回值一定是void

   *一定要接收一個參數,而且參數類型跟成員變量類型一致

   *形參的名稱不能跟成員變量名一樣
eg:

#import <Foundation.foundation.h>@interface Student : NSObject : NSObject //聲明一個類 {int _age;//設置一個成員變量 }- (void)study;//聲明一個study對象方法 - (void)setAge:(int)age;//聲明set方法@end@implementation Student //對聲明的方法進行實現- (void)setAge:(int)age //set方法的實現 {if(age <= 0) //對不合理的值進行過濾{age = 1;}_age = age; }- (void)study //study方法的實現 {NSLog("%d歲的學生在學習",age); }@endint main() {Student *stu = [Student new];//新建一個Student類型對象[stu setAge :10];//調用set方法進行賦值操作[stu study];// 對象調用對象方法return 0; }

2> get方法
 ?、僮饔?#xff1a;返回成員變量值

 ?、诿幏?/p>

   *有返回值,返回值類型與成員變量類型相同

   *方法名跟成員變量名相同

   *不需要接收任何參數

eg:

#import <Foundation.foundation.h>@interface Student : NSObject //聲明一個類 {int _age;//設置一個成員變量 }- (void)study;//聲明一個對象方法 - (void)setAge:(int)age;//聲明set方法 - (int)age;//聲明get方法@end@implementation Student //對聲明的方法進行實現- (void)setAge:(int)age //set方法的實現 {if(age <= 0) //對不合理的值進行過濾{age = 1;}_age = age; }- (int)age // get方法的實現 {return _age; }- (void)study //study方法的實現 {NSLog("%d歲的學生在學習",[stu age]);//get方法的調用 }@endint main() {Student *stu = [Student new];//新建一個Student類型對象[stu setAge :10];//調用set方法進行賦值操作[stu study];// 對象調用對象方法return 0; }

3> 封裝細節

?、俪蓡T變量名以_開頭,命名規范

  *作用1,讓成員變量名與get方法名區分開

  *作用2,跟局部變量名分開,帶_一般就是成員變量名

eg:

#import <Foundation.Foundation.h>@interface Score : NSObject //聲明Score類 {int _cScore;//設置成員變量 _cScoreint _ocScore;//設置成員變量 _ocScoreint _totalScore;//設置成員變量 _totalScoreint _averageScore;//設置成員變量 _averageScore }- (void)setCScore:(int)cScore;//聲明set方法 - (int)cScore;//聲明get方法- (void)setOcScore:(int)ocScore;//聲明set方法 - (int)ocScore;//聲明get方法- (int)totalScore;//聲明get方法 - (int)averageScore;//聲明get方法@end@implementation Score //方法的實現- (void)setCScore:(int)cScore //set方法的實現 {_cScore = cScore;_totalScore = _cScore + _ocScore;//計算總分,監聽成員變量的改變_averageScore = _totalScore/2;//計算平均分 }- (int)cScore // get方法的實現 {return _cScore; }- (void)setOcScore:(int)ocScore //set方法的實現 {_ocScore = ocScore;_totalScore = _cScore + _ocScore; //計算總分,監聽成員變量的改變_averageScore = _totalScore/2;//計算平均分 }- (int)ocScore // get方法的實現 {return _ocScore; }- (int)totalScore // get方法的實現 {return _totalScore; } - (int)averageScore // get方法的實現 {return _averageScore ; }@endint main() {Score *sc = [Score new];int t = [sc _totalScore];int a = [sc _averageScore];NSLog("總分是%d,平均分是%d",t, a);return 0; }

4> 封裝的好處

  *過濾不合理的值

  *屏蔽內部的賦值過程

  *讓外部不必關注內部細節

5類方法和對象方法對比

1> 類方法:

1、以加號+開頭2、只能用類名調用,對象不能調用3、類方法中不能訪問實例變量(成員變量)4、使用場合:當不需要訪問成員變量的時候,盡量用類方法

2> 對象方法:

1、以減號-開頭

2、只能讓對象調用,沒有對象,這個方法根本不可能被執行

3、對象方法能訪問實例變量(成員變量)

3> 類方法和對象方法可以同名

Self:指向了方法調用者(為指向指針),代表當前對象

用self訪問成員變量,區分同名的局部變量

1、使用細節

出現的地方:所有的OC方法中(對象方法\類方法),不能出現在函數

用法:

"self->成員變量名" 訪問當前方法調用的成員變量"[self 方法名];" 來調用方法(對象方法\類方法)

2、常見錯誤

低級錯誤:用self去調用函數類方法中用self調用對象方法,對象方法中用self調用類方法,使self死循環

轉載于:https://www.cnblogs.com/wlios/p/4631866.html

總結

以上是生活随笔為你收集整理的OC-封装、继承、多态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。