前言
什么叫多態?多態就是一種事物可以有多種表現形式
多態三要素
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("小轎車"));
}
}
比較第一種寫法 假如司機還會開其他的車 只需要添加會開這種車的類就行 司機類不需要再添加其它功能方法 。代碼簡介 后期維護比較方便 這種編寫多態的形式也叫向上轉型。
但是要想調用子類獨有的方法必須向下轉型才能調用
