引言:什麼叫作多型呢?
用通俗的話來說就是在同一時刻事物所呈現的不同狀態
例如 水:
多型 固態 液態 氣態
打個比方 父親person有行為這個方法,裡面包括幾個動作:吃飯,睡覺,走路 父親有三個兒子,三個兒子都繼承了父親的行為方法,所以三個兒子都有吃飯,睡覺,走路這些動作,但是三個兒子又分別有自己的方法---大兒子a會彈吉他,二兒子b會唱歌,三兒子c會打鼓 ...
1.person person = new a();是父類引用指向子類物件而不是父類物件指向子類引用。
2.如果僅是這麼去寫程式則父類引用不能去呼叫子類a特有的彈結他方法--person.guitar(); x
3此時還不是多型,記住實現多型的三要素:繼承 重寫 父類引用指向子類物件
4.要想使用父類引用去呼叫子類的特有方法guitar(),則需要在父類中同樣寫乙個guitar()方法,子類的guitar()是對父類guitar()方法的重寫,此時就可以使用person.guitar()。
注意:此時
在**的編譯階段
,person呼叫的仍然是
自己的guitar()
,不是子類的
,而當程式執行時
,person呼叫的卻是子類的guitar()
。這個動態的過程(編譯和執行是不同的狀態)才是多型 。
多型的前提:
1)必須有繼承關係
這是多型的入口,必經之地
2)必須有方法重寫
要使用父類的引用去呼叫子類中的方法,則這個被呼叫的方法必須在父類和子類中都存在,而且子類 中的這個方法必須對父類中的這個方法進行重寫。
3)必須有父類的引用指向子類物件(向上轉型)
父類名 fu = new 子類名() ;
父類引用的建立是通過子類在堆記憶體中新建了(new)乙個物件,也就是說父類的引用是通過子類新建物件進行的。
過載是一種靜態的多型。在程式編譯時能夠確定的方法呼叫,稱為早繫結,而在多態變數和重寫相結合之後在執行時才能確定,是動態的多型性,稱為晚繫結。
多型中成員訪問特點:
1)成員變數: 編譯看左,執行看左
2)非靜態
成員方法
:編譯看左,執行看右(存在方法重寫)
3)構造方法:無論是父類還是子類,都是對物件進行初始化
4)靜態成員方法: 編譯看左,執行看左(靜態跟類有關,算不上方法重寫)
**示例
package org.westos;
class fu
public fu()
public static void function()
}//子類
class zi extends fu
public static void function()
public void method()
}public class extendsdemo2
}
多型的好處1)可以提高**的復用性:由繼承保證
2)可以提高**的擴充套件性:由多型保證...
**示例
package org.westos;
class animal
public void sleep()
}// 貓類
class cat extends animal
public void sleep()
}// 狗類
class dog extends animal
public void sleep()
}// pig類
class pig extends animal
public void sleep()
}// 可以定義乙個動物的工具類animaltool
class animaltool
// 靜態功能
// 呼叫貓的功能
/* * public static void usecat(cat c) //呼叫豬的功能 public static void usepig(pig p)
* * //呼叫狗的功能 public static void usedog(dog d)
*/public static void useanimal(animal a)
}public class extendsdemo2
}
萬物有利則必有弊,此乃真理也!!!下面來說說多型的弊端
多型的弊端
不能通過父類的引用去呼叫子類中特有的功能
**例項
package org.westos;
class father2
}class son2 extends father2
//子類的特有關功能
public void method()
}public class extendsdemo2
}
可不可以將子類的引用指向父類的引用呢? (向下轉型)
格式: 子類名 s=(子類名) f;
將父類的引用強制轉換為子類的引用
**示例
package org.westos;
class father3
}class son3 extends father3
// 子類的特有關功能
public void method()
}public class extendsdemo2
}
向下轉型使用不當,會出現乙個異常:屬於執行時期異常:classcastexception
**如下
**示例
JAVA基礎之多型
多型。物件導向的第三個特徵 多型。多型 指某種事物的多種存在形態。物件的多型性 比如,貓這個事物,也可叫做物件。他肯定具備貓的基本特徵,同時也具有動物的基本特徵。這就是貓的多型性,物件的多型性。簡單的意思就是 乙個物件對應著不同的型別。那麼多型在 中的體現形式就是 父類 動物 或者介面的引用指向其子...
JAVA基礎之多型
一 定義 允許不同類的物件對同乙個訊息做出不同的響應 比如你是乙個酒神,對酒情有獨鍾。某日回家發現桌上有幾個杯子裡面都裝了白酒,從外面看我們是不可能知道這是些什麼酒,只有喝了之後才能夠猜出來是何種酒。你一喝,這是劍南春 再喝這是五糧液 再喝這是酒鬼酒 在這裡我們可以描述成如下 酒 a 劍南春 酒 b...
Java基礎之多型
1.多型的條件 1.繼承 2.方法的重寫 3.父類引用指向子類物件 2.多型中成員和成員方法的訪問特點 1.成員 編譯看左邊 父類 執行看左邊 父類 2.成員方法 編譯看左邊 父類 執行看右邊 子類 public class demo09 polymorphic class father class...