(笔记)多态:向下转型

以下是例题:

以下类都在同一包中:

package ch13.day0802.lx.lx02;
public class Test {
	public static void main(String[] args) {
		Customer customer=new Customer();
		Factory factory=new Factory();
		
		customer.getPrinter(factory.generate(1));
		
		customer.getPrinter(factory.generate(2));
		
		customer.getPrinter(factory.generate(3));	
	}
}

结果为:

        针式打印机--打印速度慢,效果差,噪音高
        喷墨打印机--打印速度一般,效果一般,噪音一般
        激光打印机--打印速度快,效果好,噪音低

package ch13.day0802.lx.lx02;
public class Customer {
	public void getPrinter(Printer p) {
//		Factory factory=new Factory();
//		Printer p=factory.generate(type);
		if(p instanceof DotMatrixPrinter) {
			((DotMatrixPrinter) p).matrix();
			
		}else if(p instanceof InkpetPrinter) {
			((InkpetPrinter)p).colcr();
			
		}else if(p instanceof LaserPrinter) {
			((LaserPrinter)p).laser();
		}	
	}	
}
package ch13.day0802.lx.lx02;
public class Factory {
	public Printer generate(int i) {
		Printer p=null;
		if(i==1) {
			p=new DotMatrixPrinter("慢","差","高");
		}else if(i==2) {
			p=new InkpetPrinter("一般","一般","一般");
		}else if(i==3) {
			p=new LaserPrinter("快","好","低");
		}
		return p;	
	}
}
package ch13.day0802.lx.lx02;
public class DotMatrixPrinter extends Printer {
	
	@Override
	public void print() {
		System.out.println("针式打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());

	}
	public void matrix() {
		System.out.println("核心打印技术:点阵系列");
	}
	//构造方法
	public DotMatrixPrinter() {}
	public DotMatrixPrinter(String speed, String effect, String noise) {
		super(speed,effect,noise);
	}	
}
package ch13.day0802.lx.lx02;

public class InkpetPrinter extends Printer {
	@Override
	public void print() {
		System.out.println("喷墨打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());
	}	
	public void colcr() {
		System.out.println("核心打印技术:五颜六色");
	}
	//构造方法
	public InkpetPrinter() {}
	public InkpetPrinter(String speed, String effect, String noise) {
		super(speed,effect,noise);
	}	
}
package ch13.day0802.lx.lx02;
public class LaserPrinter extends Printer {
	@Override
	public void print() {
		System.out.println("激光打印机--打印速度"+this.getSpeed()+",效果"+this.getEffect()+",噪音"+this.getNoise());
	}
	public void laser() {
		System.out.println("核心打印技术:激光技术");
	}
	//构造方法
	public LaserPrinter() {}
	public LaserPrinter(String speed, String effect, String noise) {
		super(speed,effect,noise);
	}	
}
package ch13.day0802.lx.lx02;

public abstract class Printer {
	private String speed;
	private String effect;
	private String noise;
	
	public abstract void print();
	
	//构造方法
	public Printer(){}
	public Printer(String speed, String effect, String noise) {
		super();
		this.speed = speed;
		this.effect = effect;
		this.noise = noise;
	}
	//get set
	public String getSpeed() {
		return speed;
	}
	public void setSpeed(String speed) {
		this.speed = speed;
	}
	public String getEffect() {
		return effect;
	}
	public void setEffect(String effect) {
		this.effect = effect;
	}
	public String getNoise() {
		return noise;
	}
	public void setNoise(String noise) {
		this.noise = noise;
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42325507/article/details/81369271