手機(jī)商城網(wǎng)站如何開發(fā)一個(gè)網(wǎng)站
Java多態(tài)
多態(tài)是同一個(gè)行為具有多個(gè)不同表現(xiàn)形式或形態(tài)的能力。
多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作
多態(tài)性是對(duì)象多種表現(xiàn)形式的體現(xiàn)。
多態(tài)的優(yōu)點(diǎn)
- 1. 消除類型之間的耦合關(guān)系
- 2. 可替換性
- 3. 可擴(kuò)充性
- 4. 接口性
- 5. 靈活性
- 6. 簡(jiǎn)化性
多態(tài)存在的三個(gè)必要條件
- 繼承
- 重寫
- 父類引用指向子類對(duì)象:Parent p = new Child();
當(dāng)使用多態(tài)方式調(diào)用方法時(shí),首先檢查父類中是否有該方法,如果沒(méi)有,則編譯錯(cuò)誤;如果有,再去調(diào)用子類的同名方法。
多態(tài)的好處:可以使程序有良好的擴(kuò)展,并可以對(duì)所有類的對(duì)象進(jìn)行通用處理
實(shí)例:
public class Test {public static void main(String[] args) {show(new Cat()); // 以 Cat 對(duì)象調(diào)用 show 方法show(new Dog()); // 以 Dog 對(duì)象調(diào)用 show 方法Animal a = new Cat(); // 向上轉(zhuǎn)型 a.eat(); // 調(diào)用的是 Cat 的 eatCat c = (Cat)a; // 向下轉(zhuǎn)型 c.work(); // 調(diào)用的是 Cat 的 work} public static void show(Animal a) {a.eat(); // 類型判斷if (a instanceof Cat) { // 貓做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } }
}abstract class Animal { abstract void eat();
} class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void work() { System.out.println("抓老鼠"); }
} class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } public void work() { System.out.println("看家"); }
}
吃魚
抓老鼠
吃骨頭
看家
吃魚
抓老鼠
?虛函數(shù)
虛函數(shù)的存在是為了多態(tài)。
Java 中其實(shí)沒(méi)有虛函數(shù)的概念,它的普通函數(shù)就相當(dāng)于 C++ 的虛函數(shù),動(dòng)態(tài)綁定是Java的默認(rèn)行為。如果 Java 中不希望某個(gè)函數(shù)具有虛函數(shù)特性,可以加上 final 關(guān)鍵字變成非虛函數(shù)。