一藐握、詳解
Java中重寫(Override)和重載(Overload)
目錄:
1.重寫(Override)
1.1 重寫的定義
1.2 重寫的規(guī)則?
1.3 Super關(guān)鍵字的使用
2.重載(Overload)
2.1 重載的定義
2.2 重載的規(guī)則?
3.Override和Overload的區(qū)別
3.1 Override實(shí)質(zhì)是子類與父類的一種多態(tài)表現(xiàn)——”隨機(jī)應(yīng)變“
3.2 Overload實(shí)質(zhì)是一個類的多態(tài)表現(xiàn)——”父子差異“
二蹲坷、要注意的點(diǎn)
class Animal{
public void move(){
System.out.println("動物可以移動");
}
}
class Dog extends Animal{
public void move(){
System.out.println("狗可以跑和走");
}
public void bark(){
System.out.println("狗可以吠叫");
}
}
public class TestDog{
public static void main(String args[]){
Animal a = new Animal(); // Animal 對象
Animal b = new Dog(); // Dog 對象洗出。阳欲。褐墅。①
a.move();// 執(zhí)行 Animal 類的方法
b.move();//執(zhí)行 Dog 類的方法
b.bark();//報(bào)錯
((Dog)b).bark();//執(zhí)行Dog類的方法烫罩。樱调。约素。②
}
}
原因:
在①處聲明對象b時,引用類型為Animal笆凌,實(shí)際類型為Dog圣猎。由于在編譯階段,知識檢查參數(shù)的的引用類型(Animal)乞而;在運(yùn)行階段送悔,Java虛擬機(jī)(JVM)才會指定對象的類型(Dog)并且運(yùn)行該對象的方法。上面的代碼在編譯階段爪模,b的引用類型Animal中沒有bark方法欠啤,所以報(bào)錯
在②處,可以通過強(qiáng)制類型轉(zhuǎn)換訪問父類(Animal)中沒有的方法(bark())-這里實(shí)質(zhì)上還是調(diào)用的是子類(Dog)中的方法(bark())