多型:某乙個(物件)事物在不同時刻表現出來的不同狀態
舉例:1.貓可以是貓的型別,貓 m = new 貓();
2.同時貓也是動物的一種:也可以把貓稱為動物
動物 d = new 貓();
再舉乙個例子:水在不同時刻的狀態;
水(液體,固體,氣態)
多型的前提:
1,要有繼承關係
2.要有方法重寫
其實沒有也是可以的,但是如果沒有這個就沒有意義
3.要有父類引用指向子類物件
父 fu = new 子();
用**體現多型:
多型中的成員訪問特點:
a:成員變數
編譯看左邊,執行看左邊
b:構造方法
建立子類物件的時候,訪問父類的構造方法,對父類的資料進行初始化
c:成員方法
編譯看左邊,執行看右邊
d:靜態方法
編譯看左邊,執行看左邊
(靜態和類相關,算不上重寫,所以訪問還是左邊的)
由於成員方法存在方法重寫,所以他執行看右邊
多型的好處
a:提高了**的維護性(繼承保證)
b:提高了**的擴充套件性()
多型的弊端:
不能使用子類的特有的功能,
如果一定要使用的話:
a:建立子類物件,呼叫方法即可(可以,但不合理,而且佔記憶體)
b:(向下轉型)
fu f = new zi();(向上轉型)
zi z = (zi)f; (向下轉型)
物件間的轉型問題:
向上轉型:
fu f = new zi();
向下轉型:
zi z=(zi)f;//要求該f必須是能夠轉換為子的,比如說貓不能轉換為狗 但是 動物轉換為狗就是可以的
多型的問題理解:
孔子裝爹;
classcastexception錯誤。型別轉換異常
一般是在多型的向下轉型中出現
繼承的時候:
子類中有和父類中一樣的方法,叫做重寫
子類中沒有父類出現過的方法,方法就被繼承
多型的好處:
1、可替換性 多型對已存在**具有可替換性。例如,多型對圓circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2、可擴充性 多型對**具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。
3 介面性(inte***ce-ability)。多型是超類通過方法簽名,向子類提供了乙個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類shape規定了兩個實現多型的介面方法,computearea()以及computevolume()。子類,如circle和sphere為了實現多型,完善或者覆蓋這兩個介面方法。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多型簡化對應用軟體的**編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。
Java 多型的理解
物件導向程式設計有三個特徵,即封裝 繼承和多型。封裝隱藏了類的內部實現機制,從而可以在不影響使用者的前提下改變類的內部結構,同時保護了資料。繼承是為了重用父類 同時為實現多型性作準備。那麼什麼是多型呢?要理解多型性,首先要知道什麼是 向上轉型 我定義了乙個子類cat,它繼承了animal類,那麼後者...
Java多型的理解
要想清楚的理解什麼是多型,就必須要了解 向上轉型 這個概念。下面我們通過乙個例子來介紹向上轉型。public class person protected void sleep public void play public class student extends person public c...
java多型的理解
public string show d obj public string show a obj class b extends a public string show b obj public string show a obj class c extends b class d extend...