java之多態詳解
阿新 • • 發佈:2018-04-05
drive 編寫 this 其他 重寫 println set 函數的參數 {}
前言
什麽叫多態?多態就是一種事物可以有多種表現形式
多態三要素
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("小轎車")); } }
比較第一種寫法 假如司機還會開其他的車 只需要添加會開這種車的類就行 司機類不需要再添加其它功能方法 。代碼簡介 後期維護比較方便 這種編寫多態的形式也叫向上轉型。
java之多態詳解