java多态的应用场景_Java开发笔记(五十一)多态的发生场景
江湖上傳聞,面向?qū)ο笾詤柡?#xff0c;是因?yàn)樗鼡碛蟹庋b、繼承與多態(tài)三項(xiàng)神技,只要三板斧一出,號令天下誰敢不從。前面費(fèi)了老大的勁才講清楚封裝和繼承,那么多態(tài)又是怎樣的神乎其神呢?下面先通過一個簡單的例子來說明多態(tài)的使用場景。
首先把雞這種家禽通過面向?qū)ο髞肀磉_(dá),方便起見只定義兩個屬性(名稱和性別),以及一個call方法,定義好的雞類代碼如下所示:
//定義一個雞類
public class Chicken {
// 定義一個名稱屬性
public String name;
// 定義一個性別屬性
public int sex;
// 定義一個叫喚方法
public void call() {
System.out.println("半夜雞叫");
}
}
接著從上面的Chicken類派生出公雞類Cock,將公雞的性別固定設(shè)置為雄性,同時重寫call這個叫喚方法。公雞類的代碼示例如下:
//定義一個繼承自雞類的公雞類
public class Cock extends Chicken {
public Cock() {
// 公雞的性別固定為雄性
sex = 0;
}
// 重寫了公雞的叫喚方法
public void call() {
System.out.println("喔喔喔");
}
}
同樣編寫母雞類Hen繼承自Chicken類,將母雞的性別固定設(shè)置為雌性,同時重寫call這個叫喚方法。母雞類的代碼示例如下:
//定義一個繼承自雞類的母雞類
public class Hen extends Chicken {
public Hen() {
// 母雞的性別固定為雌性
sex = 1;
}
// 重寫了母雞的叫喚方法
public void call() {
System.out.println("咯咯咯");
}
}
最后在外部創(chuàng)建一個Chicken雞類的實(shí)例,先將公雞實(shí)例賦值給這個雞類實(shí)例chicken,緊接著調(diào)用chicken的call方法;再將母雞實(shí)例賦值給雞類實(shí)例chicken,緊接著調(diào)用chicken的call方法。按此步驟編寫的測試調(diào)用代碼見下:
//演示類的多態(tài)性
public class TestChicken {
public static void main(String[] args) {
// 雞類的實(shí)例變成了一只公雞
Chicken chicken = new Cock();
// 此時雞類的叫聲就變?yōu)楣u的叫聲
chicken.call();
// 雞類的實(shí)例變成了一只母雞
chicken = new Hen();
// 此時雞類的叫聲就變?yōu)槟鸽u的叫聲
chicken.call();
}
}
運(yùn)行以上的測試代碼,觀察到以下的日志信息:
喔喔喔
咯咯咯
由日志結(jié)果可見,盡管chicken本來是雞類的實(shí)例,然而兩次調(diào)用chicken的call方法,卻沒有輸出雞類的叫聲,而是先后打印了公雞類的叫聲和母雞類的叫聲。這個現(xiàn)象便是多態(tài)特性的一個實(shí)際運(yùn)用,所謂多態(tài),意思是有多種狀態(tài),好比古人的卸甲歸田,穿上盔甲去打仗就是士兵,卸下盔甲去種田就是農(nóng)民。多態(tài)的實(shí)現(xiàn)依賴于繼承,先聲明一個父類的實(shí)例,再于合適之時給它分別賦予不同的子類實(shí)例,此后操作該實(shí)例就仿佛操作子類的實(shí)例一般。
引入多態(tài)概念的好處是,只要某些類型都從同一個父類派生而來,就能在方法內(nèi)部把它們當(dāng)作同一種類型來處理,而無需區(qū)分具體的類型。仍以雞叫為例,不管是公雞叫還是母雞叫,都是某種雞在叫,于是完全可以定義一個叫喚方法,根據(jù)輸入的雞參數(shù),讓這只雞自己去叫即可。叫喚方法的具體代碼如下所示:
// 定義一個叫喚方法,傳入什么雞,就讓什么雞叫
private static void call(Chicken chicken) {
chicken.call();
}
這下有了通用的雞叫方法,外部就能把雞類的實(shí)例作為輸入?yún)?shù)填進(jìn)去。當(dāng)輸入?yún)?shù)為公雞實(shí)例的時候,call方法上演的是公雞喔喔叫;當(dāng)輸入?yún)?shù)為母雞實(shí)例的時候,call方法上演的是母雞咯咯叫。
call(new Cock()); // 公雞叫
call(new Hen()); // 母雞叫
總結(jié)
以上是生活随笔為你收集整理的java多态的应用场景_Java开发笔记(五十一)多态的发生场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql算法优化原则_Mysql优化原
- 下一篇: 艾薇儿裸照(艾玛·沃特森)