多型是物件導向的三大特性之一
什麼是多型性?
物件在執行過程中的多種形態:比如乙個人,在生活中會扮演不同的角色比如學生、孩子、父親母親、老公老婆等。
多型性我們大概可以分成兩類:
(1)方法的過載與重寫
(2)物件的多型性
例如:
//用父類的引用指向子類物件(用大型的型別去接受小的型別,向上轉型、自動轉換)
chicken home = new homechicken();
或者這樣,在主函式中建立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
}//雞
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名同學,如何在程式中輸出所有同學的學號?陣列 一組能夠儲存相同型別值的變數的集合。當我們有一組相同型別的資料需要儲存,如果此時使用單個變數來儲存,我們將要定義若干個變數名,這樣將會非常繁瑣,並不利於維護。定義陣列 方法一 使用預設的初始值來初始化陣列中每乙個元素 語法 陣列...