⑴ 什麼是多態性,使用多態有什麼好處
什麼是多態?
可以這么回答:
父類引用
引用子類對象
父類和子類有同名的覆蓋方法
通過父類引用調用這個重寫的方法的時候。多數的話就可以稱為多態,單數可以說運行時綁定。
使用多態有什麼好處?
類調用者對類的使用成本進一步降低
封裝是讓類的調用者不需要知道類的實現細節,多態能讓類的調用者連這個類的類型是什麼都不必知道,只需要知道這個對象具有某個方法即可。因此,多態可以理解成是封裝的更進一步,讓類調用者對類的使用成本進一步降低。
能夠降低代碼的「圈復雜度」,避免使用大量的if-else
多態在代碼中的體現:
輸出結果:
貓吃魚
貓吃魚(因為描述的是真正的是一隻貓)
拓展:
多態性:同一操作作用於不同的對象,可以用不同的解釋,產生不同的執行結果,這就是多態性。
多態性通過派生類覆寫基類中的虛函數的方法來實現。
多態性分為兩種,一種是編譯時的多態性,一種是運行時的多態性。
編譯時的多態性:編譯時多態是通過重載來實現的。對於非虛的成員來說,系統在編譯時,根據傳遞的參數,返回的類型等信息決定實現何種操作。
運行時的多態性:運行時的多態性就是指直到系統運行時,才根據實際情況決定實現何種操作。
⑵ java為什麼要用多態,什麼是多態
多態性在Java編程中是一種核心概念,它允許使用同一類名的變數引用多種不同類型的對象,從而實現代碼的復用和靈活性。多態性主要分為兩種類型:重載和重寫。
重載式多態,也稱為編譯時多態,指的是在同一類中方法的重載。通過不同的參數列表來區分不同的方法,編譯器在編譯時就能確定調用哪個方法。例如,一個類可以有多個同名的方法,但參數不同,編譯器會根據傳入的參數類型和數量自動選擇相應的方法調用。
重寫式多態,也稱為運行時多態或動態多態,指的是子類繼承父類後,重寫父類中的方法。在運行時,父類引用指向子類對象時,會根據實際的對象類型動態調用相應的方法。這種多態性是通過動態綁定(dynamic binding)實現的,即在執行期間根據實際對象類型調用方法,確保調用的是子類的特定實現。
實現多態性需要滿足三個條件:繼承、介面和方法重寫。當父類引用指向子類對象時,通過向上轉型(upcasting)可以訪問到子類繼承自父類的方法。然而,向上轉型丟失了子類特有的方法,因此,若想調用子類獨有的方法,需要進行向下轉型(downcasting)。
以下是一個簡單的示例,展示了多態性在Java中的應用。通過代碼,我們可以看到不同對象調用相同方法時的動態行為:
在示例中,我們創建了一個`Animal`類和兩個子類`Cat`和`Dog`。當使用父類引用調用`eat()`方法時,會根據實際對象類型調用相應的子類實現。向上轉型允許使用父類引用訪問子類對象,但會丟失子類特有的方法。向下轉型則可以通過強轉`cast`恢復子類特有的方法。最後,我們通過一個面試題進一步加深對多態性的理解,展示了向上轉型和向下轉型的用法以及它們各自的限制。
總的來說,多態性是Java中一種強大的特性,它允許我們編寫更加靈活、易於維護和擴展的代碼。通過合理利用多態,我們可以避免硬編碼特定對象類型,提高代碼的復用性和適應性。