/**
* Machine类代表一台打印机。这台打印机里面分别装有墨盒(BoxDemo类),纸张(PaperDemo类)
* 这个Machine类(打印机)的构造方法是传递两个参数,分别是墨盒(BoxDemo类),纸张(PaperDemo类)。
* 墨盒(Box类)也有两个子类,彩色墨盒(ColorBox)和黑白墨盒(BlackBox);
* 纸张(Paper类)也有两个子类,A4纸张类和B5纸张类。
* Machine类的构造方法不传递具体实现的哪个墨盒或哪一种纸张,只是传递他们的父类有墨盒(BoxDemo类),纸张(PaperDemo类)。
* 然后通过父类引用指向子类的对象实现多态。
*
*/
public class Machine {
private BoxDemo boxDemo;
private PaperDemo paperDemo;
public Machine() {
super();
}
public Machine(BoxDemo boxDemo, PaperDemo paperDemo) {
super();
this.boxDemo = boxDemo;
this.paperDemo = paperDemo;
}
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) {
A4 a4 = new A4();
B5 b5 = new B5();
BlackBox blackBox = new BlackBox();
ColorBox colorBox = new ColorBox();
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();
}
}