OC-封装、继承、多态
面向對象的三大特征:封裝、繼承、多態(tài)
1.封裝
什么是封裝:在程序上,隱藏對象的屬性和實現(xiàn)細節(jié),僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別;將對象得到的數(shù)據(jù)和行為(或功能)相結合,形成一個有機的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進行有機的結合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。
1> set方法
① 作用:提供一個方法給外界設置成員變量值,實現(xiàn)對參數(shù)的相應過濾
② 命名規(guī)范
*方法名必須以set開頭
*set后面跟上成員變量的名稱,成員變量名首字母必須大寫
*返回值一定是void
*一定要接收一個參數(shù),而且參數(shù)類型跟成員變量類型一致
*形參的名稱不能跟成員變量名一樣
eg:
2> get方法
①作用:返回成員變量值
②命名規(guī)范
*有返回值,返回值類型與成員變量類型相同
*方法名跟成員變量名相同
*不需要接收任何參數(shù)
eg:
#import <Foundation.foundation.h>@interface Student : NSObject //聲明一個類 {int _age;//設置一個成員變量 }- (void)study;//聲明一個對象方法 - (void)setAge:(int)age;//聲明set方法 - (int)age;//聲明get方法@end@implementation Student //對聲明的方法進行實現(xiàn)- (void)setAge:(int)age //set方法的實現(xiàn) {if(age <= 0) //對不合理的值進行過濾{age = 1;}_age = age; }- (int)age // get方法的實現(xiàn) {return _age; }- (void)study //study方法的實現(xiàn) {NSLog("%d歲的學生在學習",[stu age]);//get方法的調用 }@endint main() {Student *stu = [Student new];//新建一個Student類型對象[stu setAge :10];//調用set方法進行賦值操作[stu study];// 對象調用對象方法return 0; }3> 封裝細節(jié)
①成員變量名以_開頭,命名規(guī)范
*作用1,讓成員變量名與get方法名區(qū)分開
*作用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 //方法的實現(xiàn)- (void)setCScore:(int)cScore //set方法的實現(xiàn) {_cScore = cScore;_totalScore = _cScore + _ocScore;//計算總分,監(jiān)聽成員變量的改變_averageScore = _totalScore/2;//計算平均分 }- (int)cScore // get方法的實現(xiàn) {return _cScore; }- (void)setOcScore:(int)ocScore //set方法的實現(xiàn) {_ocScore = ocScore;_totalScore = _cScore + _ocScore; //計算總分,監(jiān)聽成員變量的改變_averageScore = _totalScore/2;//計算平均分 }- (int)ocScore // get方法的實現(xiàn) {return _ocScore; }- (int)totalScore // get方法的實現(xiàn) {return _totalScore; } - (int)averageScore // get方法的實現(xiàn) {return _averageScore ; }@endint main() {Score *sc = [Score new];int t = [sc _totalScore];int a = [sc _averageScore];NSLog("總分是%d,平均分是%d",t, a);return 0; }4> 封裝的好處
*過濾不合理的值
*屏蔽內部的賦值過程
*讓外部不必關注內部細節(jié)
5類方法和對象方法對比
1> 類方法:
1、以加號+開頭2、只能用類名調用,對象不能調用3、類方法中不能訪問實例變量(成員變量)4、使用場合:當不需要訪問成員變量的時候,盡量用類方法2> 對象方法:
1、以減號-開頭
2、只能讓對象調用,沒有對象,這個方法根本不可能被執(zhí)行
3、對象方法能訪問實例變量(成員變量)
3> 類方法和對象方法可以同名
Self:指向了方法調用者(為指向指針),代表當前對象
用self訪問成員變量,區(qū)分同名的局部變量
1、使用細節(jié)
出現(xiàn)的地方:所有的OC方法中(對象方法\類方法),不能出現(xiàn)在函數(shù)
用法:
"self->成員變量名" 訪問當前方法調用的成員變量"[self 方法名];" 來調用方法(對象方法\類方法)2、常見錯誤
低級錯誤:用self去調用函數(shù)類方法中用self調用對象方法,對象方法中用self調用類方法,使self死循環(huán)轉載于:https://www.cnblogs.com/wlios/p/4631866.html
總結
以上是生活随笔為你收集整理的OC-封装、继承、多态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单例模式到Java内存模型
- 下一篇: AD4003 VHDL设计及仿真