1.多態(tài)
什么是多態(tài)径玖?
多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口谒养,使用不同的實(shí)例而執(zhí)行不同操作挺狰。
多態(tài)的優(yōu)點(diǎn):
消除類型之間的耦合關(guān)系 可替換性 可擴(kuò)充性 接口性 靈活性 簡化性
可以使程序有良好的擴(kuò)展,并可以對所有類的對象進(jìn)行通用處理
多態(tài)存在的三個必要條件:
繼承 重寫 父類引用指向子類對象
SuperClass sup = new subClass();
當(dāng)使用多態(tài)方式調(diào)用方法時买窟,首先檢查父類中是否有該方法丰泊,如果沒有,則編譯錯誤始绍;如果有瞳购,再去調(diào)用子類的同名方法。
public class JavaDuoTai {
public static void main(String[] args) {
show(new DuotaiDog());
show(new DuotaiCat());
DuotaiAnimal d = new DuotaiDog();
d.eat();
DuotaiAnimal c = new DuotaiCat();
c.eat();
}
public static void show(DuotaiAnimal a) {
a.eat();
if (a instanceof DuotaiDog) {
DuotaiDog d = (DuotaiDog) a;
d.work();
} else if (a instanceof DuotaiCat) {
DuotaiCat c = (DuotaiCat) a;
c.work();
}
}
}
abstract class DuotaiAnimal {
abstract void eat();
}
class DuotaiDog extends DuotaiAnimal {
@Override
void eat() {
System.out.println("狗吃骨頭");
}
public void work() {
System.out.println("狗看家");
}
}
class DuotaiCat extends DuotaiAnimal {
@Override
void eat() {
System.out.println("貓吃魚");
}
public void work() {
System.out.println("狗捉老鼠");
}
}
2.虛函數(shù)
虛函數(shù)的存在是為了多態(tài)亏推。Java中其實(shí)沒有虛函數(shù)的概念学赛,它的普通函數(shù)就相當(dāng)于C++的虛函數(shù),動態(tài)綁定是Java的默認(rèn)行為吞杭。如果 Java 中不希望某個函數(shù)具有虛函數(shù)特性盏浇,可以加上 final 關(guān)鍵字變成非虛函數(shù)。
3.多態(tài)的實(shí)現(xiàn)方式
方式一:重寫
方式二:接口
方式三:抽象類和抽象方法