黑马程序员——OC语言基本语法知识(一)
通過 指針->成員變量名 方式給成員變量賦值具有危險性,?可能被賦值為不合理的數值。不允許通過指針直接修改成員變量,?就要去掉@public。?通過方法來修改成員變量的值,?方法中可以加代碼保證接收的值是合理的賦值。
?
設置成員變量屬性值的方法,?通常稱為該屬性的set方法,?命名方式為?setAge: ,?接收一個相同類型的參數,形參的名稱不能和成員變量名相同。
?舉例:
?
在?main函數中調用set方法:
[stu setAge:18]; ? ?//?賦值為18
[stu setAge:-18]; ? //?默認賦值為1
?
以后就不要寫@public了,?必須要通過set方法來設置成員變量。?可以保證成員變量數據的合理性。
?
二、 get方法
?
沒有@public,?我們就不能通過?stu->age?來查看成員變量的值?(被保護)。我們要通過調用方法來返回成員變量值。
?
get方法:?返回該對象的成員變量值。
?舉例
?
在main函數中調用get方法獲得age屬性的值:
int myAge = [stu age];
?
注意:?不是所有的成員變量都有set和get方法,?如果有的成員變量是只讀屬性(read only),?只能被訪問,?不能被修改,?這樣的情況就可以只提供get方法,?不寫set方法。
?
三、 封裝的好處
封裝可以保證數據的安全性。?如果要給成員變量賦值,?必須通過set方法進行訪問,?在set方法中,?可以添加對不合理的屬性值的過濾。
?
四、 命名規范
?
在get方法中,?方法名和返回的成員變量名是一樣的,?可讀性不好。?所以規范成員變量名以下劃線開頭,?便于和get方法名和局部變量名區分。
?
成員變量名規范以?
?
*** 繼承 ***
?
一、 基本概念
類B繼承了類A,?那么類B具有類A的所有屬性和方法。
在OC中繼承關系用?:?表示。
比如我們要寫一個Dog類和一個Cat類,?兩個類擁有相似的成員變量和方法,?不想把代碼復制很多遍。可以寫一個Animal類,?把貓和狗相同的內容放到Animal里,?然后讓Dog和Cat繼承Animal類。
?
二、 優缺點
繼承的好處:?子類擁有父類的所有成員變量和方法,?減少重復代碼.?建立類之間的關系。
?
繼承的缺點:?代碼耦合性太強?(類之間的關系太緊密,?如果某個類壞了,?另一個類會受影響)。
?
我們的類如果不繼承NSObject就沒有new方法,?就沒有創建對象的能力。我們的類能夠調用new方法,?說明NSObject類擁有new方法。可以查看NSObject類的說明,?找到?+new?方法。
NSObject是基類,?幾乎所有的類最終都是繼承于它。也有的類不是繼承NSObject的,?比如NSProxy,?它也是一個基類。
?
子類有自己的成員變量方法和父類的所有成員變量和方法?(以及父類的父類的)。
?
*** 多態 ***
有繼承才有多態。
多態就是可以用父類的指針指向子類的對象.?不管用什么指針,?調用方法時調用的都是對象的方法。
?
一、 多態的好處:
?
可以使用父類指針來代表各種子類對象調用函數,節省代碼。
?
比如,?我們有一個Cat類,?有eat方法;?還有一個Dog類,?也有eat方法
?
??
我們想寫函數來喂動物,?喂Dog和Cat由于參數類型不同,?需要對每種類型都寫一個函數:
?
?
?
這兩個函數體是很相似的,?而且如果有更多的動物,?還要寫很多相似的函數,?很麻煩,?還要使用不同的名字。
這樣,就可以使用多態來簡化,寫一個Animal類,?作為Dog?和Cat的父類,?這樣在函數中就可以使用Animal *指針,?來指代Dog或Cat類型的參數:
?
?
這樣只需要寫一個函數,?很方便,?而且調用的還都是每個對象自身的方法。
?
二、 多態的局限性
?
不建議用父類指針調用子類的特有方法。
如果用父類指針調用子類在父類中沒有的方法,?雖然調用的是子類對象的方法,?但是編譯器會報警告,?因為它只能看到用父類的指針調用一個父類沒有的方法。
舉例
轉載于:https://www.cnblogs.com/HtercelH/p/4033735.html
總結
以上是生活随笔為你收集整理的黑马程序员——OC语言基本语法知识(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全局变量、局部变量、静态全局变量、静态局
- 下一篇: 关于安卓调用C#的WebService上