本文目錄一覽:
如何理解JAVA的多態性
在面向對象編程中,多態是指一個介面有多種實現方式,即一個介面使用不同實例執行不同的操作。在java中多態有兩種表現形式:方法的重載和方法的重寫。方法的重載是指同一個類中可以可以存在多個同名的方法,但這些方法的參數必須不同(個數,順序,類型),程序運行時根據其參數的數量與類型調用對應的方法實現不同的功能。(與返回值類型沒有關係)public
void
plant(int
i){方法體;}public
void
plant(String
s){方法體;}方法的重寫是指子類提供與父類相同的方法,包括方法的名稱,參數列表,返回值類型。 還有可以
父類
變數名=new
子類();
北大青鳥設計培訓:java多態的總結?
父類引用指向子類對象是Java比較基礎的概念。
Java作為一門面向對象編程的語言,調用對象是在編程中經常用到的。
北大青鳥為大家詳細說明這一概念。
例如父類Animal,子類Cat,Dog。
其中Animal可以是類也可以是介面,Cat和Dog是繼承或實現Animal的子類。
Animalanimal=newCat();即聲明的是父類,實際指向的是子類的一個對象。
那這麼使用的優點是什麼,為什麼要這麼用?可以用這幾個關鍵詞來概括:多態、動態鏈接,向上轉型。
也有人說這是面向介面編程,可以降低程序的耦合性,即調用者不必關心調用的是哪個對象,只需要針對介面編程就可以了,被調用者對於調用者是完全透明的。
讓你更關注父類能做什麼,而不去關心子類是具體怎麼做的,你可以隨時替換一個子類,也就是隨時替換一個具體實現,而不用修改其他。
以後結合設計模式(如工廠模式,代理模式)和反射機制可能有更深理解。
下面介紹Java的多態性和其中的動態鏈接,向上轉型:面向對象的三個特徵:封裝、繼承和多態;封裝隱藏了類的內部實現機制,可以在不影響使用者的前提下修改類的內部結構,同時保護了數據;繼承是為了重用父類代碼,子類繼承父類就擁有了父類的成員。
方法的重寫、重載與動態連接構成多態性。
Java之所以引入多態的概念,原因之一是它在類的繼承問題上和C++不同,後者允許多繼承,這確實給其帶來的非常強大的功能,但是複雜的繼承關係也給C++開發者帶來了更大的麻煩,為了規避風險,Java只允許單繼承,派生類與基類間有IS-A的關係(即「貓」isa「動物」)。
這樣做雖然保證了繼承關係的簡單明了,但是勢必在功能上有很大的限制,所以,Java引入了多態性的概念以彌補這點的不足,此外,抽象類和介面也是解決單繼承規定限制的重要手段。
同時,多態也是面向對象編程的精髓所在。
理解多態,首先要知道「向上轉型」。
我定義了一個子類Cat,它繼承了Animal類,那麼後者就是前者是父類。
我可以通過 Catc=newCat(); 實例化一個Cat的對象,這個不難理解。
但當我這樣定義時: Animala=newCat(); 這代表什麼意思呢? 很簡單,它表示我定義了一個Animal類型的引用,指向新建的Cat類型的對象。
由於Cat是繼承自它的父類Animal,所以Animal類型的引用是可以指向Cat類型的對象的。
這就是「向上轉型」。
java中多態是什麼意思?
多態(Polymorphism)按字面的意思就是「多種狀態」。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為一個或更多的他的子對象相等的技術,賦值之後,
父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自「Delphi4 編程技術內幕」)。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數實現的。
多態指同一個實體同時具有多種形式。它是面向對象程序設計(OOP)的一個重要特徵。如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的。C++中的多態性具體體現在運行和編譯兩個方面。
運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。
多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。
C++中,實現多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。
OC中的多態:不同對象對同一消息的不同響應.子類可以重寫父類的方法
多態就是允許方法重名 參數或返回值可以是父類型傳入或返回。
擴展資料:
把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。
賦值之後,父類型的引用就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。
比如從某個基類派生出多個子類,其基類有一個虛方法Tdoit,然後其子類也有這個方法,但行為不同,然後這些子類對象中的任何一個可以賦給其基類對象的引用,或者說將子對象地址賦給基類指針,這樣其基類的對象就可以執行不同的操作了。
實際上你是在通過其基類的引用來訪問其子類對象的,你要做的就是一個賦值操作。
使用繼承性的結果就是當創建了一個類的家族,在認識這個類的家族時,就是把子類的對象當作基類的對象,這種認識又叫作upcasting(向上轉型)。這樣認識的重要性在於:我們可以只針對基類寫出一段程序,但它可以適應於這個類的家族,
因為編譯器會自動找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamic binding)。
參考資料:百度百科-多態
java中多態性什麼意思?
多態性:顧名思義就是擁有「多種形態」的含義,是指屬性或方法在子類中表現為多種形態。
在JAVA中有兩種多態是指:運行時多態和編譯時多態。多態性是面向對象的核心特徵之一,類的多態性提供類中成員設計的靈活性和方法執行的多樣性。
多態指允許不同類的對象對同一消息做出響應。即同一消息可以根據發送對象的不同而採用多種不同的行為方式。(發送消息就是函數調用)
實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
擴展資料:
多態的好處:
1、可替換性(substitutability)多態對已存在代碼具有可替換性。例如,多態對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2、可擴充性(extensibility)多態對代碼具有可擴充性。增加新的子類不影響已存在類的多態性、繼承性,以及其他特性的運行和操作。實際上新加子類更容易獲得多態功能。
3、介面性(interface-ability)多態是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。
4、靈活性(flexibility)它在應用中體現了靈活多樣的操作,提高了使用效率。
5、簡化性(simplicity)多態簡化對應用軟體的代碼編寫和修改過程,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要。
參考資料:百度百科-多態
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295727.html