多態

package package1;

public class Demo11 {
public static void main(String[] args) {
	ColorPrinter color=new ColorPrinter("聯想");
	BlackPrinter blck=new BlackPrinter("惠普");
	School stu=new School();
	//stu.setColorPrinter(color);
	stu.setBlackPrinter(blck);
	stu.print("hello java");
}
}
class Printer{
	private String brand;
	public Printer(String brand) {
		this.brand=brand;
	}
	public String getPrint() {
		return brand;
	}
	//此打印方法有子類來實現
	public void print(String content) {
		
	}
}
class ColorPrinter extends Printer{

	public ColorPrinter(String brand) {
		super(brand);
	}
	//對父類方法進行重寫
	public void print(String content) {
			System.out.println(getPrint()+"彩色打印"+content);
	}
}
class BlackPrinter extends Printer{

	public BlackPrinter(String brand) {
		super(brand);
	}
	//對父類方法進行重寫
	public void print(String content) {
			System.out.println(getPrint()+"黑白打印"+content);
	}
}
class School{
	private ColorPrinter cP=null;
	private BlackPrinter bP=null;
	//安裝彩色打印機
	public void setColorPrinter(ColorPrinter cp) {
		this.cP=cp;
	}
	//安裝黑白打印機
	public void setBlackPrinter(BlackPrinter bp) {
		this.bP=bp;
	}
	public void print(String content) {
		bP.print(content);
	}
}
以上是彩色打印機和黑白打印機的實現,若是在加入一臺針式打印機那麼又得進行添加一個類(針式打印機的類),並且在學校這個類中添加屬性。如此一來不斷的添加打印機不斷添加類太麻煩,那麼用多態來實現改進這一麻煩的過程。
package package1;

public class Demo11 {
public static void main(String[] args) {
	ColorPrinter color=new ColorPrinter("聯想");
	BlackPrinter blck=new BlackPrinter("惠普");
	School stu=new School();
	//stu.setPrinter(color);
	stu.setPrinter(blck);
	stu.print("hello java");
}
}
class Printer{
	private String brand;
	public Printer(String brand) {
		this.brand=brand;
	}
	public String getPrint() {
		return brand;
	}
	//此打印方法有子類來實現
	public void print(String content) {
		
	}
}
class ColorPrinter extends Printer{

	public ColorPrinter(String brand) {
		super(brand);
	}
	//對父類方法進行重寫
	public void print(String content) {
			System.out.println(getPrint()+"彩色打印"+content);
	}
}
class BlackPrinter extends Printer{

	public BlackPrinter(String brand) {
		super(brand);
	}
	//對父類方法進行重寫
	public void print(String content) {
			System.out.println(getPrint()+"黑白打印"+content);
	}
}
class School{
	/*
	private ColorPrinter cP=null;
	private BlackPrinter bP=null;
	*/
	//改進後:直接寫父類的引用變量(學校安裝打印機)
	private Printer p=null;
	/*
	 * //安裝彩色打印機
	public void setColorPrinter(ColorPrinter cp) {
		this.cP=cp;
	}
	//安裝黑白打印機
	public void setBlackPrinter(BlackPrinter bp) {
		this.bP=bp;
	}*/
	
	//寫一個通用的方法,拿父類的引用變量做爲參數,好處就是能夠接受任何其子類對象
	public void setPrinter(Printer p) {
		this.p=p;
	}
	public void print(String content) {
		p.print(content);
	}
}
經過多態使程序有更好的可維護性和擴展性
相關文章
相關標籤/搜索