前言
什么叫多態?多態就是一種事物可以有多種表現形式
多態三要素
1.被動方必須有繼承關系
2.子類一般都要重寫父類方法
3.必須將主動方的功能函數的參數設置為 被動方父類的類型
舉個例子司機開車
假如說司機會開汽車 我們需要定義個汽車的類 然后在司機類中添加會開汽車的的方法
假如說司機會開卡車 我們需要再定義一個卡車的類 然后在司機類中添加會開卡車的方法下面看下傳統的調用方式 代碼如下:
class Car { private String name; //無參 構造方法 public Car(){} // 有參構造方法 public Car(String name){ this.name = name; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public void run(){} } class Bus extends Car { public Bus(){} public Bus(String name){ super(name); } public void run(){ System.out.println("公交車在跑"); } } class SmallCar extends Car { public SmallCar(){} public SmallCar(String name){ super(name); } public void run(){ System.out.println("小轎車在跑"); } } class Drivers { //假如司機會開公交車 public void driverBus(Bus b){ b.run(); } //假如司機會開小轎車 public void driverSmallCar(SmallCar smcar){ smcar.run(); } } class TestDt { public static void main(String[] args) { Drivers d = new Drivers(); //司機開公交車 d.driverBus(new Bus("公交車")); d.driverSmallCar(new SmallCar("小轎車")); } }
正如上面的列子 在添加司機開其他的車 就會重復上面的行為 缺點是 擴展性比較差,后期代碼維護困難。
然后我們用多態的寫法優化上述例子 代碼如下:
class Car { private String name; //無參 構造方法 public Car(){} // 有參構造方法 public Car(String name){ this.name = name; } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public void run(){} } class Bus extends Car { public Bus(){} public Bus(String name){ super(name); } public void run(){ System.out.println("公交車在跑"); } } class SmallCar extends Car { public SmallCar(){} public SmallCar(String name){ super(name); } public void run(){ System.out.println("小轎車在跑"); } } class Drivers { public void driverCar(Car car){ car.run(); } } class TestDt { public static void main(String[] args) { Drivers d = new Drivers(); d.driverCar(new Bus("公交車")); d.driverCar(new SmallCar("小轎車")); } }
比較第一種寫法 假如司機還會開其他的車 只需要添加會開這種車的類就行 司機類不需要再添加其它功能方法 。代碼簡介 后期維護比較方便 這種編寫多態的形式也叫向上轉型。
但是要想調用子類獨有的方法必須向下轉型才能調用