1. 程式人生 > >java之多態詳解

java之多態詳解

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之多態詳解