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); } } 經過多態使程序有更好的可維護性和擴展性