0
点赞
收藏
分享

微信扫一扫

【Java面向对象】java学习之旅15-多态

大柚子top 2022-03-12 阅读 94

定义:

前提:

向上转型和向下转型:

优点:

注意事项:

下面用打印机来说明多态:

/**
 * 打印机(父类)
 */
public class Printer {
	
	private String name;

	public Printer() {
		super();
	}
	public Printer(String name) {
		super();
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Printer [name=" + name + "]";
	}
	
	//有一个自身的打印方法
	public void print() {
		System.out.println("打印");
	}
}
/**
 * 黑白打印机(子类)
 */
public class BlackAndWhitePrinter extends Printer {

	public BlackAndWhitePrinter() {
		super();
	}

	public BlackAndWhitePrinter(String name) {
		super(name);
	}

	@Override
	public void print() {
		System.out.println("打印黑白文档");
	}
	
}

/**
 * 彩色打印机(子类)
 */
public class ColorsPrinter extends Printer {

	public ColorsPrinter() {
		super();
	}

	public ColorsPrinter(String name) {
		super(name);
	}

	@Override
	public void print() {
		System.out.println("打印彩色文档");
	}
	
}

下面建一个打印工人类来使用打印机:

/**
 * 打印工人类
 * 
 * @author junki
 * @date 2019年11月26日
 */
public class Worker {

	private String name;

	public Worker() {
		super();
	}
	public Worker(String name) {
		super();
		this.name = name;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	@Override
	public String toString() {
		return "Worker [name=" + name + "]";
	}
	
	//使用打印机的方法
	public void usePrinter(Printer p) {
		if (p instanceof BlackAndWhitePrinter) {
			p.print();
		} else {
			System.out.println("这个打印机我不会用");
		}
	}
	
}

在主方法中我们可以使用多态:

public static void main(String[] args) {
		
		BlackAndWhitePrinter bawp = new BlackAndWhitePrinter();
		bawp.print();
		
		ColorsPrinter cp = new ColorsPrinter();
		cp.print();
		
		
		Printer p1 = new BlackAndWhitePrinter();// 向上转型
		Printer p2 = new ColorsPrinter();
		
		p1.print();
		p2.print();
		
		Worker worker = new Worker();
		ColorsPrinter printer1 = new ColorsPrinter();
		BlackAndWhitePrinter printer2 = new BlackAndWhitePrinter();
		//在这里可以看到,工人中我们只使用了父类对象作为参数,而在调用中,
		//我们往参数里面传进子类对象,调用的是子类重写的方法,这就是多态。
		worker.usePrinter(printer1);// 向上转型
		
		
		// 向下转型错误演示
		// ClassCastException
		Printer p3 = new Printer();
		//ColorsPrinter cp3 = (ColorsPrinter) p3;
		
		Printer p4 = new ColorsPrinter();
		ColorsPrinter cp4 = (ColorsPrinter) p4;
		cp4.print();
		
	}

总结:

是方法的多态,父类定义一个方法,子类可以有不同的重写,然后只需要在形参放入父类对象,子类可以随意往形参中放入自己的对象,又称叫做向上转型

举报

相关推荐

0 条评论