標籤:
多態是物件導向思想“三大特徵”之一,其餘兩個分別是封裝和繼承。
通過繼承,一個類可以被當做不止一個資料類型使用,他可以被用做自身代表的資料類型(這是最常用的),還可以當做他的任意基類所代表的資料類型乃至任意介面類型---前題是這個類實現了這個介面。
對於多態,可以總結它為:
一、使用父類類型的引用指向子類的對象;
二、該引用只能調用父類中定義的方法和變數;
三、如果子類中重寫了父類中的一個方法,那麼在調用這個方法的時候,將會調用子類中的這個方法;(動態串連、動態調用)
四、變數不能被重寫(覆蓋),”重寫“的概念只針對方法,如果在子類中”重寫“了父類中的變數,那麼在編譯時間會報錯。
多態性:發送訊息給某個對象,讓該對象自行決定響應何種行為。
通過將子類對象引用賦值給超類對象引用變數來實現動態方法引動過程
具體例子請看下面代碼:
class Father{
public void func1(){
func2();
}
//這是父類中的func2()方法,因為下面的子類中重寫了該方法
//所以在父類類型的引用中調用時,這個方法將不再有效
//取而代之的是將調用子類中重寫的func2()方法
public void func2(){
System.out.println("AAA");
}
}
class Child extends Father{
//func1(int i)是對func1()方法的一個重載
//由於在父類中沒有定義這個方法,所以它不能被父類類型的引用調用
//所以在下面的main方法中child.func1(68)是不對的
public void func1(int i){
System.out.println("BBB");
}
//func2()重寫了父類Father中的func2()方法
//如果父類類型的引用中調用了func2()方法,那麼必然是子類中重寫的這個方法
public void func2(){
System.out.println("CCC");
}
}
public class PolymorphismTest {
public static void main(String[] args) {
Father child = new Child();
child.func1();//列印結果將會是什麼?
}
}
什麼是多態