千峰Java教程 059 物件導向的多型性

2021-09-22 16:46:35 字數 2438 閱讀 3555

多型是物件導向的三大特性之一

什麼是多型性?

物件在執行過程中的多種形態:比如乙個人,在生活中會扮演不同的角色比如學生、孩子、父親母親、老公老婆等。

多型性我們大概可以分成兩類:

(1)方法的過載與重寫

(2)物件的多型性

例如:

//用父類的引用指向子類物件(用大型的型別去接受小的型別,向上轉型、自動轉換)

chicken home = new homechicken();

public class a

}//雞

abstract class chicken

public chicken(string name)

public void setname(string name)

public string getname()

public abstract void eat();

}//家雞

class homechicken extends chicken

public void eat() }

//野雞

class yechicken extends chicken

public void eat() }

/*結果:

小**,我愛吃公尺

大**,我愛吃蟲子

*/

或者這樣,在主函式中建立homechicken和yechicken的兩個變數時,去掉home和ye:

public class a

}//雞

abstract class chicken

public chicken(string name)

public void setname(string name)

public string getname()

public abstract void eat();

}//家雞

class homechicken extends chicken

public void eat() }

//野雞

class yechicken extends chicken

public void eat() }

/*結果:

小**,我愛吃公尺

大**,我愛吃蟲子

*/

我們再在主函式類中加乙個方法:

public class a

//抽象(粒度,即精細程度) 面向抽象程式設計(面向介面程式設計)

//下面方法的形參必須是chicken,如果是homechicken或者是yechicken的話就會報錯,因為chicken比後兩個大

public static void eat(chicken c) }

//雞abstract class chicken

public chicken(string name)

public void setname(string name)

public string getname()

public abstract void eat();

}//家雞

class homechicken extends chicken

public void eat() }

//野雞

class yechicken extends chicken

public void eat() }

/*結果:

雞吃飯小**,我愛吃公尺

雞吃飯大**,我愛吃蟲子

*/

結論:

在程式設計時針對抽象型別的編寫**,稱為面向抽象程式設計(或面型介面程式設計)

父類通常都定義為抽象類、介面

物件的多型性:

物件的多型性是從繼承關係中的多個類而來

向上轉型:將子類例項轉為父類引用

格式:父類 父類物件 = 子類例項; → 自動轉換

以基本資料型別操作為例,int i = 'a';

(因為char的容量比int小,所以可以自動完成)

向下轉型:將父類例項轉換為子類例項

格式:子類 子類物件 = (子類)父類例項;強制轉換

以基本資料型別操作為例,char c = (char)97;

因為整形是4個位元組,比char兩個位元組要大,所以需要強制完成

多型性小結

1、方法的過載與重寫就是方法的多型性表現

2、多個子類就是父類中的多種形態

3、父類引用可以指向子類物件,自動轉換

4、子類物件指向父類引用需要強制轉換(注意,型別不對會報異常)

5、在實際開發中盡量使用父類引用(更利於擴充套件)

千峰Java教程 037 物件導向基本概念

首先,來看看面向過程和物件導向 面向過程 以步驟為單位,一步一步完成某乙個具體事情 物件導向 以物件為單位,通過排程組合不同的物件完成某乙個事情 更高階 一 什麼是物件導向 1 物件導向是一種程式設計思想。2 物件導向是一種思考問題的思維方式。二 建立物件導向的思維方式 1 先整體,再區域性。2 先...

千峰Java教程 070 遞迴演算法

鍊錶 linked list 一種常見的資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每個節點裡存到是下乙個節點的指標 pointer 在鍊錶資料結構中,我們需要用到遞迴演算法。遞迴演算法是一種直接或間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效...

千峰Java教程 025 Java陣列的定義

首先 問題 乙個班裡有50名同學,如何在程式中輸出所有同學的學號?陣列 一組能夠儲存相同型別值的變數的集合。當我們有一組相同型別的資料需要儲存,如果此時使用單個變數來儲存,我們將要定義若干個變數名,這樣將會非常繁瑣,並不利於維護。定義陣列 方法一 使用預設的初始值來初始化陣列中每乙個元素 語法 陣列...