首頁(yè)技術(shù)文章正文

多態(tài)是什么意思?案例演示多態(tài)的運(yùn)行過(guò)程

更新時(shí)間:2021-05-18 來(lái)源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

在Java中,多態(tài)是指不同類的對(duì)象在調(diào)用同一個(gè)方法時(shí)所呈現(xiàn)出的多種不同行為。通常來(lái)說(shuō),在一個(gè)類中定義的屬性和方法被其他類繼承或重寫后,當(dāng)把子類對(duì)象直接賦值給父類引用變量時(shí),相同引用類型的變量調(diào)用同一個(gè)方法所呈現(xiàn)出的多種不同形態(tài)。通過(guò)多態(tài),消除了類之間的耦合關(guān)系,大大提高了程序的可擴(kuò)展性和可維護(hù)性。

Java的多態(tài)性是由類的繼承、方法重寫以及父類引用指向子類對(duì)象體現(xiàn)的。由于一個(gè)父類可以有多個(gè)子類,多個(gè)子類都可以重寫父類方法,并且多個(gè)不同的子類對(duì)象也可以指向同一個(gè)父類。這樣,程序只有在運(yùn)行時(shí)程序才能知道具體代表的是哪個(gè)子類對(duì)象,這就體現(xiàn)了多態(tài)性。

在解了Java多態(tài)性的概念后,接下來(lái)通過(guò)一個(gè)案例來(lái)進(jìn)行演示說(shuō)明,如文件1所示。

文件1 Example15.java

    // 定義抽象類Animal
     abstract class Animal {
         abstract void shout(); // 定義抽象shout()方法
     }
     // 定義Cat類繼承Animal抽象類
     class Cat extends Animal {
         // 實(shí)現(xiàn)shout()方法
         public void shout() {
             System.out.println("喵喵……");
         }
     }
     // 定義Dog類繼承Animal抽象類
     class Dog extends Animal {
         // 實(shí)現(xiàn)shout()方法
         public void shout() {
             System.out.println("汪汪……");
         }
     }
     // 定義測(cè)試類
     public class Example15 {
         public static void main(String[] args) {
             Animal an1 = new Cat(); 
             Animal an2 = new Dog(); 
             an1.shout();
             an2.shout();
         }
     }
運(yùn)行結(jié)果如圖1所示。

1621326098885_21.jpg

圖1 運(yùn)行結(jié)果

文件1中,首先定義了一個(gè)抽象類Animal和抽象方法,接著定義了兩個(gè)類Cat和Dog繼承了Animal,在第22~25行代碼中,分別創(chuàng)建了Cat和Dog兩個(gè)類對(duì)象同時(shí)指向一個(gè)父類對(duì)象,并調(diào)用shout()方法,程序在編譯時(shí)自動(dòng)識(shí)別具體的子類對(duì)象,從而選擇性的調(diào)用對(duì)應(yīng)的方法,這就是Java中多態(tài)性的體現(xiàn)。由此可見,多態(tài)不僅解決了方法同名的問(wèn)題,而且還使程序變的更加靈活,從而有效的提高程序的可擴(kuò)展性和可維護(hù)性。





猜你喜歡:

如何創(chuàng)建類的實(shí)例對(duì)象?

什么是 Window 對(duì)象? 什么是 Document 對(duì)象?

如何理解面向?qū)ο蟮姆庋b、繼承和多態(tài)?

黑馬程序員java后端開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!