通過一個“印表機”例子來更好的理解什麼是多型。
阿新 • • 發佈:2018-12-14
/**
* Machine類代表一臺印表機。這臺印表機裡面分別裝有墨盒(BoxDemo類),紙張(PaperDemo類)
* 這個Machine類(印表機)的構造方法是傳遞兩個引數,分別是墨盒(BoxDemo類),紙張(PaperDemo類)。
* 墨盒(Box類)也有兩個子類,彩色墨盒(ColorBox)和黑白墨盒(BlackBox);
* 紙張(Paper類)也有兩個子類,A4紙張類和B5紙張類。
* Machine類的構造方法不傳遞具體實現的哪個墨盒或哪一種紙張,只是傳遞他們的父類有墨盒(BoxDemo類),紙張(PaperDemo類)。
* 然後通過父類引用指向子類的物件實現多型。
*
*/
public class Machine {
//私有化墨盒BoxDemo抽象類和紙張PaperDemo抽象類作為成員變數。
//雖然抽象類不可以建立具體的例項物件,但可以宣告,通過父類的引用指向子類的物件來實現多型。
//這裡存在繼承、子類重寫父類的方法、父類的引用指向子類的物件,,,是實現多型的三個必要條件。
private BoxDemo boxDemo;
private PaperDemo paperDemo;
public Machine() {
super();
// TODO Auto-generated constructor stub
}
public Machine(BoxDemo boxDemo, PaperDemo paperDemo) {
super();
this.boxDemo = boxDemo;
this.paperDemo = paperDemo;
}
//留一個公開的startPrint()方法給其他類呼叫。
public void startPrint(){
System.out.println("正在使用" + boxDemo.boxPrint() + paperDemo.paperPrint());
}
public BoxDemo getBoxDemo() {
return boxDemo;
}
public void setBoxDemo(BoxDemo boxDemo) {
this.boxDemo = boxDemo;
}
public PaperDemo getPaperDemo() {
return paperDemo;
}
public void setPaperDemo(PaperDemo paperDemo) {
this.paperDemo = paperDemo;
}
}
/**
* 這個是代表墨盒的父類BoxDemo類,它是一個抽象類,具體方法由繼承它的子類來重寫實現。
*
*/
public abstract class BoxDemo {
//這裡是一個抽象類,具體的方法由子類實現;
public abstract String boxPrint();
}
/**
* 這個是代表“紙張”的父類PaperDemo類,它是一個抽象類,具體方法由繼承它的子類來重寫實現。
*
*/
public abstract class PaperDemo {
public abstract String paperPrint();
}
/**
*這個是“紙張PaperDemo”的子類,並重寫了父類的方法。
*
*/
public class A4 extends PaperDemo{
@Override
public String paperPrint() {
return "A4";
}
}
-------------------------------------------------------------
/**
*這個是“紙張PaperDemo”的子類,並重寫了父類的方法。
*
*/
public class B5 extends PaperDemo{
@Override
public String paperPrint() {
return "B5";
}
}
/**
*這個是“墨盒BoxDemo類”的子類,並重寫了父類的方法。
*
*/
public class BlackBox extends BoxDemo{
@Override
public String boxPrint() {
return "黑白墨盒";
}
}
------------------------------------------------------------------
/**
*這個是“墨盒BoxDemo類”的子類,並重寫了父類的方法。
*
*/
public class ColorBox extends BoxDemo{
@Override
public String boxPrint() {
return "彩色墨盒";
}
}
/**
* 這個是執行測試類Lanuch,來看看是怎樣實現多型的。
*
*/
public class Lanuch {
public static void main(String[] args) {
//分別建立BoxDemo和PaperDemo的子類,當作引數傳遞給Machine類的構造方法。
A4 a4 = new A4();
B5 b5 = new B5();
BlackBox blackBox = new BlackBox();
ColorBox colorBox = new ColorBox();
//分別建立4臺不同的印表機。
Machine machine01 = new Machine(colorBox, a4);
Machine machine02 = new Machine(blackBox, a4);
Machine machine03 = new Machine(colorBox, b5);
Machine machine04 = new Machine(blackBox, b5);
//呼叫印表機的列印方法。
machine01.startPrint();
machine02.startPrint();
machine03.startPrint();
machine04.startPrint();
}
}