黑馬程式設計師 OC 物件導向三大特性

2021-06-29 03:05:34 字數 4794 閱讀 2946

**封裝**
一、 set方法和get方法

1. set方法和get方法的使用場合

@public的成員可以被隨意賦值,應該使用set方法和get方法來管理成員的訪問

set方法

1) 作用:用來設定成員變數,可以在方法裡面過濾掉一些不合理的值

2) 命名規範:

方法都是以set開頭,而且後面跟上成員變數名,成員變數名的首字母必須大寫

形參名稱不要跟成員變數同名

get方法

1) 作用:返回物件內部的成員變數

2) 命名規範:get方法的名稱一般就跟成員變數同名

成員變數的命名規範

成員變數都以下劃線 _ 開頭

可以跟get方法的名稱區分開

可以跟其他區域性變數區分開,一看到下劃線開頭的變數,肯定是成員變數

**示例

#import 

@inte***ce

student : nsobject

///*

set方法

1.作用: 提供乙個方法給外界設定成員變數值,可以在方法裡面對引數進行相應過濾

2.命名規範:

1> 方法名必須以set開頭

2> set後面跟上成員變數的名稱,成員變數的首字母必須大寫

3> 返回值一定是void

4> 一定要接收乙個引數,而且引數型別跟成員變數型別一致

5> 形參的名稱不能跟成員變數名一樣

*/- (void)setage:(int)newage;

/* get方法

1.作用:返回物件內部的成員變數

2.命名規範:

1> 肯定有返回值,返回值型別肯定與成員變數型別一致

2> 方法名跟成員變數名一樣

3> 不需要接收任何引數

*/- (int)age;

- (void)study;

@end

@implementation

student

// set方法的實現

- (void)setage:(int)newage

age = newage;

}- (int)age

- (void)study

@end

int main()

封裝的好處

過濾不合理的值

遮蔽內部的賦值過程

讓外界不必關注內部的細節

二、 類方法

1. 基本概念

直接可以用類名來執行的方法(類本身會在記憶體中佔據儲存空間,裡面有類\物件方法列表)

2. 類方法和物件方法對比

1) 物件方法

以減號-開頭

只能讓物件呼叫,沒有物件,這個方法根本不可能被執行

物件方法能訪問例項變數(成員變數)

2) 類方法

以加號+開頭

只能用類名呼叫,物件不能呼叫

類方法中不能訪問例項變數(成員變數)

使用場合:當不需要訪問成員變數的時候,盡量用類方法

3) 類方法和物件方法可以同名

三、 self關鍵字

1. 成員變數和區域性變數同名

當成員變數和區域性變數同名時,採取就近原則,訪問的是區域性變數

用self訪問成員變數,區分同名的區域性變數

2. 使用細節

1) 出現的地方:所有的oc方法中(物件方法\類方法),不能出現在函式

2) 作用

使用 「self->成員變數名」 訪問當前方法呼叫的成員變數

使用 「[self 方法名];」 來呼叫方法(物件方法\類方法)

3. 常見錯誤

低階錯誤:用self去呼叫函式

類方法中用self呼叫物件方法,物件方法中用self呼叫類方法

self死迴圈

#import 

/* self的用途:

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

* self出現在物件方法中,self就代表物件

* self出現在類方法中,self就代表類

2> 在物件方法利用"self->成員變數名"訪問當前物件內部的成員變數

2> [self 方法名]可以呼叫其他物件方法\類方法

*/@inte***ce

dog : nsobject

- (void)bark;

- (void)run;

@end

@implementation

dog- (void)bark

- (void)run

@end

int main()

**繼承和多型**
一、 繼承

1. 繼承的基本用法

子類方法和屬性的訪問過程:如果子類沒有,就去訪問父類的

父類被繼承了還是能照常使用的

父類的靜態方法

nsobject的引出:全部oc類的最終父類,包含了一些常用方法,比如+new

繼承的好處

不改變原來模型的基礎上,拓充方法

建立了類與類之間的聯絡

抽取了公共**

壞處:耦合性強

繼承的使用場合

它的所有屬性都是你想要的,一般就繼承

它的部分屬性是你想要的,可以抽取出另乙個父類

#import

/* 1.繼承的好處:

1> 抽取重複**

2> 建立了類之間的關係

3> 子類可以擁有父類中的所有成員變數和方法

2.注意點

1> 基本上所有類的根類是nsobject

*//********animal的宣告*******/

@inte***ce animal : nsobject

- (void)setage:(int)age;

- (int)age;

- (void)setweight:(double)weight;

- (double)weight;

@end

/********animal的實現*******/

@implementation animal

- (void)setage:(int)age

- (int)age

- (void)setweight:(double)weight

- (double)weight

@end

/********dog*******/

// : animal 繼承了animal,相當於擁有了animal裡面的所有成員變數和方法

// animal稱為dog的父類

// dog稱為animal的子類

@inte***ce dog : animal

@end

@implementation dog

@end

/********cat*******/

@inte***ce cat : animal

@end

@implementation cat

@end

int main()

二、 多型

1. 多型的基本概念

某一類事物的多種形態

oc物件具有多型性

2. 多型的體現

person *p = [student new];

p->age = 100;

[p walk];

子類物件賦值給父類指標

父類指標訪問對應的屬性和方法

3. 多型的好處

用父類接收引數,節省**

4. 多型的侷限性

不能訪問子類的屬性(可以考慮強制轉換)

5. 多型的細節

動態繫結:在執行時根據物件的型別確定動態呼叫的方法

#import 

/* 多型

1.沒有繼承就沒有多型

2.**的體現:父類型別的指標指向子類物件

3.好處:如果函式\方法引數中使用的是父類型別,可以傳入父類、子類物件

4.侷限性:

1> 父類型別的變數 不能 直接呼叫子類特有的方法。必須強轉為子類型別變數後,才能直接呼叫子類特有的方法

*/// 動物

@inte***ce

animal : nsobject

- (void)eat;

@end

@implementation

animal

- (void)eat

@end

// 狗

@inte***ce

dog : animal

- (void)run;

@end

@implementation

dog- (void)run

- (void)eat

@end

// 貓

@inte***ce

cat : animal

@end

@implementation

cat- (void)eat

@end

// 這個函式是專門用來喂動畫

//void feed(dog *d)

////

//void feed2(cat *c)

////

// 如果引數中使用的是父類型別,可以傳入父類、子類物件

void feed(animal *a)

int main()

黑馬程式設計師 OC物件的三大特性

oc語言是物件導向的語言,其三大特性必不可少。1.封裝是乙個很重要的概念,它避免外界直接訪問或修改物件的屬性,可以過濾不合理的值,讓外界不必關心內部的細節。通過set方法來讓外部設定成員的屬性值,通過get方法來獲得物件屬性值。import inte ce student nsobject void...

黑馬程式設計師 OC 物件導向

物件導向和面向過程的區別 面向過程關心的是解決問題需要哪些步驟。物件導向關注的是解決問題需要哪些物件。oc中的面相物件 世界萬物皆物件。物件導向更加復合人民的思考習慣,將複雜的事情簡單化處理,使人民從執行者變成了指揮者 oc中的類相當於圖紙,用來描述一類事物。也就是說,要想建立物件,必須先有類 oc...

黑馬程式設計師 OC 物件導向(一)

android培訓 ios培訓 期待與您交流!oc簡介 oc完全相容c語言,可以使用oc開發mac os x平台和ios平台的應用程式。oc的關鍵字基本上都是以 開頭。nslog 與printf 的區別 nslog 接收oc 字串作為引數,printf接收c 語言字串作為引數。nslog 輸出後會自...