Java 多態定義
多態是同一個行為具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作
多態的優點
1. 消除類型之間的耦合關系
2. 可替換性
3. 可擴充性
4. 接口性
5. 靈活性
6. 簡化性
多態存在的三個必要條件
繼承
重寫
父類引用指向子類對象(比如:Parent p = new Child())
當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。
多態的好處:可以使程序有良好的擴展,并可以對所有類的對象進行通用處理。
下面的列子很好的理解多態?
public class Test {
?public static void main(String[] args)?
{?
? ? ? ?show(new Cat()); // 以 Cat 對象調用 show 方法?
? ? ? ?show(new Dog()); // 以 Dog 對象調用 show 方法
? ? ? ?Animal a = new Cat();? // 向上轉型? ? ??
? ? ? ? a.eat();? ? ? ? ? ? ? // 調用的是 Cat 的 eat? ? ??
? ? ? ? Cat c = (Cat)a;? ? ? ? // 向下轉型? ? ? ?
? ? ? ? ?c.work();? ? ? ? // 調用的是 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("看家");?
? ? }? }
多態的實現方式
方式一:重寫:
這個內容已經在上一章節詳細講過,就不再闡述,詳細可訪問:可以看小計2。
方式二:接口
1. 生活中的接口最具代表性的就是插座,例如一個三接頭的插頭都能接在三孔插座中,因為這個是每個國家都有各自規定的接口規則,有可能到國外就不行,那是因為國外自己定義的接口類型。
2. java中的接口類似于生活中的接口,就是一些方法特征的集合,但沒有方法的實現。
方式三:抽象類和抽象方法