1. 程式人生 > >OC面向物件的三大特性

OC面向物件的三大特性

三大特性:

封裝,繼承,多型

封裝:

當類中的屬性加 @public 為公共物件是 傳入的實參可能是不合理的,這時可以提供一個方法給外界設定屬性值,這種方法一般叫做set方法。

set方法: 提供一個方法給外界設定成員變數

宣告:(規範) 方法名必須以set開頭 後面跟成員變數的名稱,首字母必須大寫;返回值一定是void,一定要接受一個引數 型別必須和成員變數一致 形參的名稱不能和成員變數一樣

- (void)setAge:(int)newAge;

get方法:訪問成員變數的值

宣告:(規範)方法名跟成員變數名一致  肯定有返回值,與成員變數的型別一致,不需要就收任何引數

- (void)age 

- (void)age {

return age;

}

封裝的作用: 保證資料的安全,隱藏細節 一些值對於外界是隻讀的,不可修改只用get方法達到只讀的特性

self: self是一個指標,指向當前呼叫物件,誰呼叫這個方法就指向誰對於類方法也適用

1   當方法內有重名時 如果希望訪問類中的成員變數,用self

2    [self  物件方法] 

@interface Person NSObject

{

int  _age

}

@end

@implementation Person

- (void)test{

int  _age=20

//這時NSLog訪問的age是成員變數中的_age

NSLog(@"%d",self->_age)

}

@end

//呼叫這個方法時用self會先執行呼叫物件的bark方法

- (void) run {

[self bark];

}

繼承:繼承另一個類中所有的成員變數和方法

作用:

1抽取重複程式碼

2建立了類之間的聯絡

注意:1比本上所有的根類都是NSObject

   2 父類寫在最上面

   3呼叫方法時會優先子類中的方法如果沒有再去找父類中的方法

           4子類重新實現父類中的某個方法叫做 重寫 

  5耦合性太強

繼承的適用場合:

1當兩個類中有相同屬性和方法時可以抽取到一個父類中

2當A類完全擁有B類中的部分屬性和方法時,可以考慮讓B類繼承A(需要符合程式碼設計邏輯)

//這裡的NSObject就是繼承 在冒號: 後面加要繼承的類

@interface Animals :NSObject

//animals為Dog的父類

@interface Dog :Animals;

組合:也是為了達到繼承的效果 ,為了設計邏輯的合理性可以使用組合

用法:

使用指標指向需要擁有的類

@interface Report:NSObject

@end

@implementation Report

@end

@interface  Student:NSObject

{

//組合的使用:student擁有Score

Score *_score

}

@end

組合與繼承: 

繼承:XX是XX

組合:XX擁有XX

多型 : 多種形態(沒有繼承就沒有多型)

多型的作用如果引數中使用的是父類型別可以傳入父類子類物件(利用父類的指標達到節省程式碼的作用)

多型的侷限性:

不能用父類的指標變數呼叫子類的方法(可以執行但是不符合語法規範)

沒有繼承就沒有多型

#import<Foundation/Foundation.h>

@interfaceAnimal:NSObject

-(void)eat;

@end

@implementationAnimal

-(void)eat{

NSLog(@"Animaleat");

}

@end

@interfaceDog:Animal

-(void)eat;

@end

@implementationDog

-(void)eat{

NSLog(@"Dogeat");

}

@end

@interfaceCat:Animal

-(void)eat;

@end

@implementationCat

-(void)eat{

NSLog(@"Cateat");

}

@end

//用來餵食

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

voidfeed(Animal*a){

[aeat];

}

intmain(intargc,constchar*argv[]){

//多型父類指向子類物件

//同理 NSObject*a=[Animalnew]也是合理的

Animal*d=[Dog new];

//呼叫方法時會檢測物件的真實型別 所以會優先執行Dog中的eat方法

[deat];

//這樣是不合理的 應為Cat沒有繼承Dog

//Cat*c=[Dognew];

//同樣是不合理的

//Cat*c1=[Animalnew];

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

feed(d);

return0;

}


相關推薦

黑馬程式設計師——OC語言基礎——面向物件三大特性之多型

繼前兩篇博文梳理了一下我對OC中面向物件三大特性的封裝、繼承之後。最重要也是最不容易理解的多型概念終於到來。 個人認為多型在三大特性中是最為重要的,但是由於它的概念性不容易用語言描述清楚,所以我還是想引用視訊教程中老師說的那句經典。 多型的實質就是: 父類的指標 指向了

Java面向物件三大特性-封裝、繼承、多型

在講Java面向三大特性之前,我們先了解一下訪問修飾符的訪問範圍: (1):private:同類中具有訪問許可權。 (2):protected:本類 和同包以及不同包的子類才具有訪問許可權。 (3):public:統一工程中都具有訪問許可權。 (4):預設 本類和同包範圍內具有訪問許可權。 一、Ja

補習:C# 面向物件三大特性:封裝、繼承、多型

C# 面向物件三大基本特性 封裝、繼承、多型 1、封裝 隱藏物件的屬性和實現細節,僅對外公開介面,控制在程式中屬性的讀取和修改的訪問級別。 C# 封裝根據具體的需要,設定使用者的訪問許可權,並通過 訪問修飾符 來實現。 一個 訪問修飾符 定義了一個類成員的範圍和可

java基礎-------面向物件三大特性:封裝、繼承、多型

面向物件三大特性: 封裝、繼承、多型; 一、封裝 1、定義: 封裝就是將類的資訊隱藏在類內部,不允許外部程式直接訪問,而是通過該類的方法實現對隱藏資訊的操作和訪問。 2、實現方法: 使用private關鍵字修飾 類內部的屬性; 3、如何訪問: 在類內部定義get、set方法,實行使用物件呼叫

面向物件-三大特性

python面向物件程式設計三大特性 小結:前面我們說完了類和物件的關係,相信對類和物件的理解更加透徹..讓我們一起去研究面向物件的三大特性吧.... 繼承 1.什麼繼承? 在程式中繼承就是事物之間的所屬關係. 2.繼承的語法: 單繼承 和多繼承 #單繼承 class A:pass clas

python面向物件三大特性之一封裝

一、什麼是封裝   在程式設計中,封裝(Encapsulation)是對具體物件的一種抽象,即將某些部分隱藏起來,在程式外部看不到,其 含義是其他程式無法呼叫。   要了解封裝,離不開“私有化”,就是將類或者是函式中的某些屬性限制在某個區域之內,外部無法呼叫。   二、為什麼要封裝   封裝資料的主

OPP(面向物件)三大特性------多型(polymorphism)

1.多型概念:多型是指同一操作作用於某一類物件,可以有不同的解釋,產生不同的執行結果。通俗來講:某一類物件可以看做是動物,同一操作可以看做eat()方法,不同的解釋看做是不同的動物,不同結果看做是吃法不同。解析起來就是:動物都有吃的行為,狗是吃骨頭,羊是吃草。

python面向物件三大特性之一繼承

繼承 即在定義一個類時,以另一個類為引數,則稱這個新定義的類繼承了引數類,父類又稱為基類。 單繼承表示只繼承一個類,多繼承表示繼承多個類。 class parent1: pass class parent2: pass class sub1(parent1):#單繼承 pa

面向物件三大特性五大原則 + 低耦合高內聚

面向物件的三大特性是"封裝、"多型"、"繼承",五大原則是"單一職責原則"、"開放封閉原則"、"里氏替換原則"、"依賴倒置原則"、"介面分離原則"。 什麼是面向物件 面向物件(Object Oriented,OO)是軟體開發方法。面向物件的概念和應用已超越了程式

JAVA面向物件三大特性以及抽象類、介面

初識JAVA面向物件 提起面向物件,我們也就想到了面向過程。那麼何為面向物件呢?簡言之萬物皆物件…眾生芸芸,雲裡霧裡不能自已。 好了,步入正題,面向物件是JAVA這門語言的核心所在。要想使用這門語言在猿界立足,一定得要有面向物件的這種程式設計思想。 一、面向物件

面向物件三大特性:封裝、繼承、多型

封裝: 將屬性和方法放到一起做為一個整體,然後通過例項化物件來處理; 隱藏內部實現細節,只需要和物件及其屬性和方法互動就可以了; 對類的屬性和方法增加 訪問許可權控制。 私有許可權:在屬性名和方法名 前面 加上兩個下劃線 __ 類的私有屬性 和 私有

面向物件——三大特性,六大原則

什麼是面向物件 面向物件是軟體開發方法。面向物件的概念和應用已經超越了程式設計和軟體開發,擴充套件到如資料庫系統,互動式介面,應用結構,應用平臺,分散式系統,網路管理結構,CAD技術,人工只能等領域。面向物件是一種對現實世界理解和抽象的方法,是計算機程式設計技術發展到一定階

面向物件三大特性—繼承

什麼是繼承 在現實生活中,經常發生子承父業的事情,同樣的,在java中也有類似的“子承父業”的情況。也就是我們今天要說的繼承。如果說我們在Java專案中有兩個類的功能極其相似或者一個類的功能是在另一個類的基礎上實現的。那麼我們寫兩份比較相似程式碼就極大的浪費了我們的時間和經

day24 面向物件三大特性之封裝

本週內容 組合 封裝 多型 面向物件高階 異常處理 網路協議 通訊原理 網際網路協議 TCP/UDP 基於TCP協議的套接字 上週回顧 1.xml,os,os.path 2.ATM+購物車 三層結構 3.面向物件與面向過程程式設計的對比 今日內容 1.面向物件

java面向物件三大特性之繼承

1、繼承 1 .1、繼承的總說明 1、子類繼承父類,可以繼承父類的全部屬性和方法( 除了父類的構造方法) 2、java只有單繼承一個子類只有一個父類不能有多個父類(c+±-) 3、如果定義一個類沒有

菜鳥學python第二十四天(面向物件三大特性之多型)

面向物件三大特性之多型 什麼是多型 不同物件響應同一種方法的表現出不同的行為,產生不同的結果 用基類建立一套統一的規則,強制子類去遵循(使用抽象類實現),這樣便可以 在不用考慮物件具體型別的前提下而直接使用物件下的方法 為什麼要有多型 增加了程式的靈活性 以不變應萬變,不論

面向物件三大特性、五大基本原則

 三大特性是:封裝,繼承,多型   所謂封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。封裝是面向物件的特徵之一,是物件和類概念的主要特性。 簡單的說,一個類就是一個封裝了資料以及操作這些資料的程式碼的邏輯實體。在一個物件內部,某些程式碼或

面向物件三大特性——封裝

封裝 【封裝】          隱藏物件的屬性和實現細節,僅對外提供公共訪問方式。 【好處】  1. 將變化隔離;  2. 便於使用; 3. 提高複用性;  4. 提高安全性; 【封裝原則】

【C++】:面向物件三大特性之繼承

面向物件三大特性之繼承 1.繼承的概念及定義 2.基類和派生類物件賦值相互轉化 3.繼承時的作用域 4.派生類中的預設成員函式 5.繼承的友元和靜態成員 6.菱形繼承和菱形虛擬繼承 7.組合和繼承 1.繼承的概念

php面向物件三大特性之一封裝

1.就是物件的成員(屬性,方法)結合成一個獨立的相同單位,並儘可能隱藏物件的內部細節private 私有的,用這個關鍵字修飾的成員,只能在物件內部訪問(只能用$this訪問),不能在物件外部使用2.這個類中有100個方法,封裝了95個(為另外5個服務的方法),只有5個方法可以