Java中的多態有哪些具體表現形式

2020-12-03 IT人劉俊明

學習Java語言的過程中,對於多態的理解是非常關鍵的,理解了多態也就意味著打開了理解Java各種「抽象」的大門。

所謂的「多態」,簡單的理解就是對象在不同情況下的不同表現,具體體現在定義和功能兩個方面,簡單的總結一下,多態可以用「三個定義和兩個方法」來總結。三個定義分別是父類定義子類構建、接口定義實現類構建和抽象類定義實體類構建,而兩個方法分別是方法重載和方法重寫。

方法重載的概念比較好理解,簡單的說,就是在同一個類中,定義了多個方法,具有相同的方法名稱和不同的參數列表。方法重載只看名稱和參數列表,其他的都不看,包括返回值類型、屬性修飾符、範圍限定等,這些都不影響方法重載的概念。

方法重寫可以用「一個前提、三個相同和兩個規定」來總結,前提是在繼承體系結構下,三個相同代表子類中定義的方法與父類中的方法,具有相同的名字、參數列表和返回值類型,兩個規定分別是子類方法的範圍限定不能比父類方法的範圍小,以及不能拋出更多的異常。當然,final類型的方法和static類型的方法是不能被重寫的。

父類定義子類構建還是比較好理解的,但是如果採用了這種定義方式,也就意味著對象本身並不能調用子類獨有的方法,而如果調用的方法恰好覆蓋了父類中的方法,則還涉及到「虛方法」的概念,實際上執行的是子類方法體中的功能語句。

接口定義實體類構建是Java中非常常見的一種多態形勢,而且由於接口屬於全抽象方式,所以這種方式可以在很大程度上提升程序的「健壯性」,也是比較推薦的編程方式。採用接口定義類構建的方式,可以在很大程度上提升代碼的可復用性。

抽象類定義實體類構建是接口定義方式的一種擴展,通常可以用在代碼的模塊內部,從而提升代碼的內聚性。

我從事網際網路行業多年,目前也在帶計算機專業的研究生,主要的研究方向集中在大數據和人工智慧領域,我會陸續寫一些關於網際網路技術方面的文章,感興趣的朋友可以關注我,相信一定會有所收穫。

如果有網際網路、大數據、人工智慧等方面的問題,或者是考研方面的問題,都可以在評論區留言!

相關焦點

  • 深入分析java中的多態(從jvm角度分析)
    對於java中多態概念的理解一直是面試常問的問題,所以今天花了一些時間好好地整理了一下,力求從java虛擬機的角度來分析和理解多態。一、認識多態1、方法調用在Java中,方法調用有兩類,動態方法調用與靜態方法調用。
  • 用經典案例來幫助初學者解析Java的「多態」
    說到Java的「多態」特性,很多人都十分熟悉、了解;也有很多人仍然在理解或闡述時對此含糊不清。我這裡還是用我13年前給我們公司新員工做內部培訓時用到的看起來似乎有點老掉牙的、但是仍然十分經典的案例來重新給有需要的java愛好者呈現一下「多態」的奧秘所在!
  • Java 中的繼承和多態(深入版)
    面向對象的三大特性:封裝、繼承、多態。在這三個特性中,如果沒有封裝和繼承,也不會有多態。那麼多態實現的途徑和必要條件是什麼呢?以及多態中的重寫和重載在JVM中的表現是怎麼樣?在Java中是如何展現繼承的特性呢?對於子類繼承於父類時,又有什麼限制呢?
  • 用最傻瓜式的方法理解Java中的封裝、繼承和多態
    說到java中面向對象的封裝、繼承和多態,很多人會說這麼簡單這麼入門的東西一直講幹嘛,雖然是基礎,但是我們要明白,所有東西都是要在基礎上發展的,沒有基礎就去學其他的,那麼你肯定是很容易失敗的,那麼應該怎樣能夠用傻瓜式方法去理解Java面向對象的封裝、繼承和多態呢?
  • Java多態,對象轉型,和簡單工廠模式 希望對您有幫助!
    各位讀者老爺們大家好鴨~圖圖又來了,今天我們要說一下「多態」。怎麼理解這兩個字呢?可以理解為同一個引用對象的不同表現形態,即將父類的引用指向子類的對象。這是比較官方的書面解釋,大家可以通過自己的理解轉化成自己的話。知道,了解一下就行。大家還需要知道的是:多態是java面向對象的三大特徵之一。
  • JAVA面向對象的多態是個什麼東西?
    面向對象的三大特徵:封裝、繼承、多態。在前面已經說了過了封裝和繼承。今天就來聊聊剩下的多態。多態,從字面內容來看,就是多種形態,多種狀態。在java的面向對象中可以從以下兩個方面來講。這個時候就會有不同的子類重寫的功能是不同的。我們來舉個例子,父類是動物類,有一個叫的方法。然後定義兩個子類繼承自這個父類,一個貓類、一個狗類。他們分別對叫的方法做了重寫,貓類重寫叫的方法是發出「喵喵」聲,而狗類重寫叫的方法是發出「汪汪」聲。
  • 必學——Java抽象類、接口、多態
    若abstract類的類體中有abstract方法,只允許聲明,而不允許實現。2、接口Java不支持多繼承性,即一個類只能有一個父類。單繼承性使得Java簡單,易於管理程序。,子類的對象(2)實現多態的兩種形式–使用父類或接口作為方法形參實現多態–使用父類或接口作為方法返回值實現多態4、抽象類 與 接口
  • Java多態性:Java什麼是多態?
    多態性是面向對象編程的又一個重要特徵,它是指在父類中定義的屬性和方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義
  • Java-類型轉換,使用強制向下轉型解決多態的弊端
    瀏覽器版本過低,暫不支持視頻播放1.1.java的類型轉換1.1.1.java的類型轉換自動向上轉型: 可以直接將子類型引用賦值給父類型變量,可以自動進行,叫做自動向上轉型;例如:class Fu{}class Zi extends Fu{}
  • Java面向對象之:封裝、繼承、多態
    在Java中使用」extends」關鍵字來表示子類和父類之間的繼承關係;在Java中,類之間的繼承關係只允許單繼承,不允許多繼承,一個類只能有一個直接父類。以下是一個多重繼承的例子:動物有胎生動物和卵生動物之分,胎生動物有老虎,老虎又分華南虎,東北虎,孟加拉虎等。
  • Java中使用接口實現多繼承和多態的方法
    1.JAVA裡沒有多繼承,一個類之能有一個父類。  而繼承的表現就是多態。一個父類可以有多個子類,而在子類裡可以重寫父類的方法(例如方法print()),這樣每個子類裡重寫的代碼不一樣,自然表現形式就不一樣。
  • Java基礎知識學習:Java三大特效之多態!
    1.1 多態的形式多態是繼封裝、繼承之後,面向對象的第三大特性。多態是出現在繼承或者實現關係中的。1.2 多態的案例演示當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,執行的是子類重寫後方法。如果子類沒有重寫該方法,就會調用父類的該方法。總結起來就是:編譯看左邊,運行看右邊。
  • 程式設計師:深入理解JVM,從JVM層面來講Java多態
    對多態理解不夠深入的,多半都會答錯;如果能記住口訣:「變量多態看左邊,方法多態看右邊,靜態多態看左邊」的話,肯定就知道答案,但是JVM是如何確定具體調用哪個方法的,有小夥伴思考過嗎?1、方法調用:方法調用並不等於方法執行,方法調用階段唯一的任務就是確定被調用方法的版本(就是具體調用哪個方法),暫時還不涉及到方法內部的具體運行過程。Class文件的編譯過程中不包含傳統編譯中的連接步驟,一切方法調用在Class文件裡面存儲的都只是符號引用,而不是方法在實際運行時內存布局中的入口地址。
  • 「Java三分鐘」Java三大特性——多態理解
    多態顧名思義,指多種狀態。一個東西被人類創造,一定為了解決某種問題的,那麼多態存在是為了解決什麼問題呢?換言之,多態存在的意義是什麼?最後寫一個Main方法運行結果:小夥伴們可能都發現了,這樣設計程序有很大的問題,一兩本書可能沒差別,但以後可能會讀成千上萬本書,如果在Persion類中一直添加重載方法是非常可怕的。然而我們怎麼利用多態來解決這個問題呢?
  • Thinking In Java --- 多態(筆記)
    在面向對象的程序設計語言中,多態是繼數據抽象和繼承之後的第三種基本特徵。多態通過分離做什麼和怎麼做,從另一個角度將接口和實現分離開來。多態不但能夠改善代碼的組織結構和可讀性,還能夠創建可擴展的程序----即無論在項目最初創建時還是在需要添加新功能時都可以「生長」的程序。
  • Java中的面向對象三大特性之多態
    父/子類中成員方法僅僅同名父/子類中成員方法同原型方法覆蓋在類的繼承體系結構中,如果子類中出現了與父類中有同原型的方法區分方法重寫和方法重載方法覆蓋(重寫)和方法重載是兩個極易混淆的概念,必須嚴格區分;方法覆蓋出現的前提條件之一是必須有繼承發生的情況下,而且要求父類和子類中的方法必須同原型;方法重載時,繼承並不是必需的,它只要求方法名稱相同,而參數列表則必須不同
  • 詳細介紹Java多態性(二)
    所以才有多態性。一個基類的對象引用,被賦予不同的子類對象引用,執行該方法時,將表現出不同的行為。在a1=c2的時候,仍然是存在兩個句柄,a1和c2,但是a1和c2擁有同一塊數據內存塊和不同的函數表。Java中在繼承以後,子類會重新設置自己的虛擬函數表,這個虛擬函數表中的項目有由兩部分組成。從父類繼承的虛擬函數和子類自己的虛擬函數。虛擬函數調用是經過虛擬函數表間接調用的,所以才得以實現多態的。Java的所有函數,除了被聲明為final的,都是用後期綁定。
  • 多態是什麼 父類如何調用子類的方法(美團面試))
    /01/多態多態(Polymorphism)按字面的意思就是「多種狀態」。在面向對象語言中,接口的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為一個或更多的他的子對象相等的技術,賦值之後,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自「Delphi4 編程技術內幕」)。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數實現的。
  • Java基礎之多態,動態綁定多態的代碼案例,簡單卻很重要
    持續更新中...一、多態多態基於繼承(),現實事物中經常可以看到人,而學生、工人、白領、太空人等都是人,即由人演變而來的多種狀態。多態是Java三大特性(封裝、繼承、多態)之一,它的出現豐富了完善了Java面向對象體系。
  • 從頭再來:Java的多態(有個測試你不一定能答對)
    多態是相同的行為但是卻有不同的表現,比如吃東西,羊吃草,狼吃肉。那為什麼用多態呢?多態還是有些好處的,多態分離做什麼和怎麼做,也就是接口的定義和實現的分離。這樣不但能改善代碼結果和提高閱讀性,還能構建可擴展的應用程式。