物件導向-多態,物件導向多態

來源:互聯網
上載者:User

物件導向-多態,物件導向多態

OC物件導向—多態

一、基本概念

多態在代碼中的體現,即為多種形態,必須要有繼承,沒有繼承就沒有多態。

在使用多態是,會進行動態檢測,以調用真實的對象方法。

多態在代碼中的體現即父類指標指向子類對象。

Animal類的聲明

 

Animal類的實現

 

Dog類繼承自Animal類

 

Dog類的實現

 

測試程式:

 

 

二、使用注意

程式碼分析:

Dog *d=[[Animal  alloc] init];   動物是一條狗?語義正確嗎?

NSString *str=[Dog  new];     狗是一個字串?正確嗎?

Oc語言是一門弱文法的語言,編譯的時候並不會報錯,所以這就要求我們在實際的開發過程中一定要按照既定的規範來寫代碼,不要出現狗是一個字串這樣的問題。

多態的好處:

需要一個新的函數專門用來喂狗

Void feed(Dog *d)

{

[d  eat];

}

如果這個時候也需要喂貓,那就應該重寫新一個新的函數

Void feed(Cat *c)

{

[c  eat];

}

而狗和貓實際上都繼承自動物這個類,在這裡就可以使用多態來簡化代碼了。

這裡只需要把函數的參數寫成是Animal *類型的,那麼Dog和Cat類型的對象就都可以傳入進來。

調用的時候直接改變參數就可以了。

 

多態的局限性:父類類型的指標變數不能直接調用子類特有的方法。

不建議的做法~

Animal *a=[[Dog alloc] init];

[a run];//在Animal類中沒有run方法,這裡調用了狗對象的方法。

解決方案:可以將a強制轉換為Dog*類型的變數,如下:

Dog *d=(Dog *)a;//使用強制轉換,這裡a和d指向的是同一個狗對象

 

三、多態使用總結

(1)沒有繼承就沒有多態

(2)代碼的體現:父類類型的指標指向子類對象

(3)好處:如果函數方法參數中使用的是父類類型,則可以傳入父類和子類對象,而不用再去定義多個函數來和相應的類進行匹配了。

(4)局限性:父類類型的變數不能直接調用子類特有的方法,如果必須要調用,則必須強制轉換為子類特有的方法。

 

四、字串補充內容

@“234”字串也是一個對象,屬於NSString這個類。下面是對字串對象的一些代碼說明:

 

字串對象的length方法:計算的是字串的字數,而不是像strlen函數那樣,計算的是字元數。如“哈ha123”length得出的結果是6,返回unsigned long類型,而strlen函數得出的結果是8,因為一個漢字佔3個位元組。

提示:字數也包括空格。

 


什是物件導向的多態性

多態是所有語言都是一樣的,C#和別的語言沒有什麼不同
主要是子類繼承父類,並重寫父類的方法,實現了不同的操作
比如:
public class 父類{
public abstract string m();
}
public class 子類1:父類{
public override string m(){
return "1";
}
}
public class 子類2:父類{
public override string m(){
return "2";
}
}

應用:
父類 a = new 子類1();
Console.Write(a.m());
a = new 子類2();
Console.Write(a.m());

上面都是調用a.m(),輸出的結果卻不一樣,這就是多態了
 
物件導向 多態 是怎一回事?

物件導向這個概念,物件導向編程,是程式設計者一直追求的,以前的編程是面向過程的,不能夠做大型的項目.物件導向編程,可以說是一次革命.更適合於人的思想,人的思維,而不是按機器語言思想,進行編程! 在C#中,一切事物都是對象!其實對象不難理解,比方說:你要找老婆,老婆是個啥樣子,多大了,姓啥,做什麼工作的,交過幾個男友,等等這些都是對象(老婆)所持有特質.

談到類型轉換,這個應該不必多說!
至於說到父類對象強制轉換為子類對象,先決條件是,父類對象存在子類對象的值,也就是曾經把子類對象賦給過父類變數!
///
如果是父類對象轉換為子類對象,那調用的是父類還是子類的方法呢(或屬性)?

這個就不好說了,要說清楚,要花上一段時間!牽到的問題比較多,子類中是不是隱藏,重寫,父類的方法, 再說,父類是抽象類別,還是介面,等等,這要具體問題具體分析!
最好把你的代碼貼出來,以助你分析!

以上是我的理解,要是有誤,請海涵!
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.