目錄
多型:同乙個物件(事物),在不同時刻體現出來的不同狀態。
多型的前提:
多型中的成員訪問特點:
多型的好處:
用工具類實現多型:
多型的弊端:不能使用子類的特有功能(呼叫子類特有的方法時會報錯)。
test:面試題:
舉例:貓可以是貓的型別。貓 m = new
貓();
同時貓也是動物的一種,也可以把貓稱為動物。動物 d = new 貓();
a:要有繼承關係。b:要有方法重寫。
其實沒有也是可以的,但是如果沒有這個就沒有意義。
動物 d = new 貓();
d.show();
動物 d = new 狗();
d.show();
c:要有父類引用指向子類物件。
父 f = new 子();
a:成員變數編譯(編譯**時或編輯乘.class檔案時)看左邊,執行(執行**)看左邊。
b:構造方法
建立子類物件的時候,訪問父類的構造方法,對父類的資料進行初始化。
c:成員方法
編譯看左邊,執行看右邊。
d:靜態方法
編譯看左邊,執行看左邊。
(靜態和類相關,算不上重寫,所以,訪問還是左邊的)
由於成員方法存在方法重寫,所以它執行看右邊。
class fu
public static void function()
}class zi extends fu
public void method()
public static void function()
}class duotaidemo
}
a:提高了**的維護性(繼承保證)b:提高了**的擴充套件性(由多型保證)
class animal
public void sleep()
}class dog extends animal
public void sleep()
}class cat extends animal
public void sleep()
}class pig extends animal
public void sleep()
}//針對動物操作的工具類
class animaltool
/*public static void usecat(cat c)
*/public static void useanimal(animal a) }
class duotaidemo2
}
如果想使用子類的特有功能需要進行物件間的轉型:
a:建立子類物件呼叫方法即可。(可以,但是很多時候不合理。而且,太佔記憶體了)b:把父類的引用強制轉換為子類的引用。(向下轉型)
物件間的轉型問題:
向上轉型:
fu f = new zi();
向下轉型:
zi z = (zi)f; //要求該f必須是能夠轉換為zi的。
/*
classcastexception:型別轉換異常
一般在多型的向下轉型中容易出現
*/class animal
}class dog extends animal
public void lookdoor()
}class cat extends animal
public void playgame()
}class duotaidemo5
}
/*
看程式寫結果:先判斷有沒有問題,如果沒有,寫出結果
多型的成員訪問特點:
方法:編譯看左邊,執行看右邊。
繼承的時候:
子類中有和父類中一樣的方法,叫重寫。
子類中沒有父親**現過的方法,方法就被繼承過來了。
*/class a
public void show2()
}class b extends a
*/ public void show2()
}class c extends b
public void show2()
}public class duotaitest4
}
物件導向 多型
繼承是多型的基礎,是指物件的多種形態 1.引用的多型 1 父類的引用可以指向本類的物件 2 父類的引用可以指向子類的物件 注意 子類的引用不能指向父類的物件 2.方法的多型 1 建立本類物件時,呼叫的方法是本類的方法 2 建立子類物件時,呼叫的方法是子類重寫的方法或是繼承的方法 注意 如果是子類獨有...
物件導向 多型
多型可以簡單的概括為 乙個介面,多種方法 在程式執行過程中才決定呼叫的函式,簡單的說就是,允許將子類型別的指標賦值給父類型別的指標,賦值後,父類物件就可以根據當前賦給它的子類物件的特徵以不同的方式執行。容易混淆的兩個概念 是指允許存在多個同名的函式,而這些函式的參數列不同 或許引數個數不同,或許引數...
物件導向 多型
多型 可以理解為事物存在的多種體現形態。人 男人,女人 動物 貓,狗。貓 x new 貓 動物 x new 貓 1,多型的體現 父類的引用指向了自己的子類物件。父類的引用也可以接收自己的子類物件。2,多型的前提 必須是類與類之間有關係。要麼繼承,要麼實現。通常還有乙個前提 存在覆蓋。3,多型的好處 ...