黑馬程式設計師 OC 學習之旅 封裝 繼承

2021-07-04 18:33:31 字數 3559 閱讀 4736

類方法的概述:

+表示類方法,就是類呼叫方法,不依賴任何物件的方法

-表示物件方法,只能物件呼叫,依賴於任何物件的方法

類的使用注意事項:

類方法可以和例項方法同名,例項方法有例項物件訪問呼叫,類方法要通過類裡訪問呼叫。

類方法也可以是從父類繼承而來,子類可以重寫類方法,

類方法和例項方法一樣在inte***ce 裡宣告,在implementation裡實現

類方法只能被類呼叫執行,向例項物件傳送類方法是不能被觸發執行的

在類方法裡使用了self,self執行的類物件是class object 而不是例項物件instance object

類方法中易犯的錯誤

在類方法中使用了類成員變數

匿名物件

[person  new]

呼叫方法:[persn new] run];

優點:可以簡化**,方便方法呼叫

缺點:匿名物件例項化以後,只能正確的使用成員變數

person  *p = [[person alloc] init];

person  *p1 =[person new];

alloc 和init分別把分配記憶體和初始化的工作分開,先分配記憶體,然後呼叫類的建構函式

封裝:

本質是:把資料隱藏起來,只能用此類的方法函式才可以訪問或者設定資料,降低資料的無用的可能型

原理:例項變數預設只能被當前類的物件方法訪問

步驟:定義設定例項變數(setter)方法和訪問例項變數(getter)方法

setter設定器

set方法的作用:提供外接乙個設定成員變數值的方法

命名規範:

方法名以set開頭

是物件方法,只能由物件呼叫

返回值一定是void

一定要接收乙個引數,而且引數型別需要和成員變數的型別一致

形參名不能和成員變數名一樣

set方法的好處:不讓資料暴露在外,保證資料的安全性

對設定的資料進行過濾

-(void)setage:(int)age;宣告

-(void)   setage:(int)age

getter方法(訪問器)

get 的作用:為呼叫者返回物件內部的成員變數

命名規範:一定有返回值,返回值的型別和成員變數的型別一致

方法名和成員變數名一樣

不需要接收任何引數

-(int)  age;宣告

-(int)age

物件和物件的關係:

組合模式:

把具有相同基類型別的物件組合到樹形結構中,表示部分-整體的層次結構

依賴關係:

a物件作為b物件的區域性變數或是方法形參,

[p  feeddog:dog];

關聯關係:當乙個物件擁有另乙個物件的時候

當b物件為a物件的成員變數的時候,b物件與a物件之間存在一種關聯關係

其耦合度高於依賴關係

過載:oc中 沒有嚴格的方法的過載

oc中的過載是引數個數不同,但返回型別後面的名字相同。或者是引數的個數相同,但是其標籤不相同

-(void)test:(int) intvalue;

-(void)test:(int) intvalue: andage:(int) age;

static關鍵字使用

static修飾區域性變數:延長區域性變數的生命週期

全域性變數:當前變數只能在當前檔案中使用

修飾函式:函式只能在當前問檔案中使用

注意:static不能修飾例項變數

static不能修飾物件方法

self和super關鍵字的介紹

super 傳送訊息可以將方法實現分發其父類。可以重寫乙個已有的方法來修飾或將他新增到現有方法中,仍然可以將原始的方法納入到修改後的方法中

self在物件方法中使用其指代的是當前類方法的物件

self 在類方法中使用其指代的是當前類

self修飾變數在物件方法中可以利用self ->屬性名稱的方式訪問成員變數

當存在區域性變數名和成員變數名同名的時候

self 誰呼叫當前方法,self就代表誰

self在物件方法中,self就代表當前物件

self在類方法中,self就代表類

[self 方法名稱];呼叫其他方法(類方法\物件方法)

繼承::

注意點:基類的私有能被繼承,但是不能被使用

oc中繼承是但繼承的:也就是說乙個類只能乙個父類,不能繼承多個父類

方法的重寫:

從父類繼承的方法,可能這個方法並不適合子類,可以再在類中重寫父類的 方法;

可以使用[super 方法名],呼叫父類的方法

繼承的注意事項:

子類不能定義和父類同名的變數,但是可以繼承父類的變數

oc類支援單一繼承,不支援多繼承

oc中類支援多層繼承

繼承體系 中方法呼叫的順序

1、在自己類中找

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

3、如果父類中沒有,就去父類的父類中找

4、如果父類的父類沒有,就還往上找,知道基類(nsobject)

5、如果nsobject也沒有就報錯

例項變數修飾符:

@public (公開的)在有物件的前提下,任何地方都可直接訪問。

@protected(受保護的)只能在當前類和子類的物件方法中訪問

@private(私有的)只能在當前類中使用

@package(框架級別的)作用域介於私有和公開之間,只要處於同乙個框架中就可以直接通過變數名訪問

@inte***ce  person :nsobject

在@inte***ce  @end之間宣告的成員變數如果不做特別的說明,預設是protected的

oc中私有變數

在類.m@implementation中也可以宣告成員變數,但是不在標頭檔案中,所以在其他類中匯入標頭檔案的時候,並不能使用這個成員變數

在類的宣告中用@private 關鍵字修飾,那麼該變數只能在本類中使用,可以被繼承,但是不可以被訪問。

在類的宣告中用@protected 關鍵字修飾,該變數只能在本類和子類中使用

在類擴充套件中定義的成員變數,是私有的

在.m檔案中定義的變數,是純私有的變數,不能被繼承,也不能被訪問。

利用@property 生成的下劃線例項變數也是屬於純私有的。

description方法及重寫

description方法預設返回物件的描述資訊(預設實現是類返回類名和物件的記憶體位址)

nslog(@"%@",objecta);會自動呼叫objecta 的description方法來輸出objecta 的描述資訊

重寫description方法

view plain

copy

-(nsstring *)description  

+(nsstring *)  

注意:千萬不能在物件description方法中同時使用%@和self

-(nsstring *)description

//同時使用了%@和self,代表要呼叫了self 的descriptiona方法,程式進入死迴圈

黑馬程式設計師 OC學習之封裝,繼承,多型

ios培訓 android培訓 期待與您交流!面向對的三大特徵就是,我們經常提到的 封裝 繼承 多型。1.封裝 隱藏屬性 方法或實現細節的過程,不去關心你的方法是怎麼實現的,只關心你能做什麼。並且,封裝的意義在於 保護或者防止 資料 被我們無意中破壞。通常情況下我們可能會定義乙個類,比如studen...

黑馬程式設計師 OC封裝

物件導向的三大特性 封裝 繼承和多型 在開發過程中,考慮到安全性要求,我們一般不在成員變數名前面使用 public protected等關鍵字修飾,而是使用set方法來為物件提供成員變數的值。set方法的內部也可以對一些不合理的賦值進行篩選過濾。set方法的作用 為外界提供乙個設定成員變數值的方法 ...

黑馬程式設計師 OC語言 封裝

ios培訓 ios培訓 期待與您交流!封裝的實質 是指隱藏物件的屬性和實現細節,對外提供公共訪問方式,封裝是一種思想.方法預設就是用了封裝的思想.屬性有兩種方式操作 1直接操作.public 2.封裝操作 通過給外部暴露兩個方法 set方法用於設定值.get方法用於獲取值.乙個屬性的set與get方...