多态演示分析

package com.qfedu.c;

/**
 * 动物类
 * @author Anonymous
 *
 */
class Animal {
	
}

/**
 * 老虎类,继承Animal类
 * @author Anonymous
 *
 */
class Tiger extends Animal {
	
}

/**
 * 熊猫类,继承Animal类
 * @author Anonymous
 *
 */
class Panda extends Animal {
	
}

/**
 * 猴子类,继承Animal类
 * @author Anonymous
 *
 */
class Monkey extends Animal {
	
}

public class Demo1 {
	public static void main(String[] args) {
		Animal animal = new Animal();
		Tiger tiger = new Tiger();
		Panda panda = new Panda();
		Monkey monkey = new Monkey();
		
		showAnimal(animal);
		
		// tiger也是动物
		showAnimal(tiger);
		// panda也是动物
		showAnimal(panda);
		// monkey还是动物
		showAnimal(monkey);
		
		System.out.println("--------------------------------");
		// 引用数据类型强制类型转换,讲Animal类型强制转换为Panda
		Panda p = (Panda) getAnimal();
		System.out.println(p);
		
		
	}
	
	/**
	 * 展示动物的方法
	 * 
	 * @param animal 这里需要的是一个Animal类对象
	 */
	public static void showAnimal(Animal animal) {
		System.out.println(animal);
	}
	
	/**
	 * 返回一个动物类对象
	 * 
	 * @return Animal类对象
	 */
	public static Animal getAnimal() {
		return new Panda(); //Panda类对象是动物
//		return new Tiger(); //Tiger类对象是动物
//		return new Monkey(); //Monkey类对象是动物
//		return new Animal();
	}
}
USB接口
	规定一个方法
		connect方法
		
键盘一个类
鼠标一个类
package com.qfedu.c;

/**
 * USB接口
 * 
 * @author Anonymous
 *
 */
interface USB {
	/**
	 * 要求所有的USB设备,都要完成connect方法
	 * 告知PC当前设备是什么功能
	 */
	void connect();
}

/**
 * Mouse类遵从USB接口,可以认为是一个USB设备
 * 
 * @author Anonymous
 *
 */
class Mouse implements USB {

	@Override
	public void connect() {
		System.out.println("鼠标控制光标");
	}
}

/**
 * Logi是Mouse类的子类,是鼠标类的子类,
 * 是否间接遵从USB接口? 是的
 * 
 * 算不算USB设备? 算
 * @author Anonymous
 *
 */
class Logi extends Mouse {
	@Override
	public void connect() {
		System.out.println("Logi Master 2S");
	}
}

/**
 * Keyboard类遵从USB接口,也可以认为是一个USB设备
 * 
 * @author Anonymous
 *
 */
class Keyboard implements USB {

	@Override
	public void connect() {
		System.out.println("键盘敲代码");
	}	
}

/**
 * IKBC类,继承Keyboard类,是键盘类的子类
 * 算不算USB设备??? 算
 * @author Anonymous
 *
 */
class IKBC extends Keyboard {
	@Override
	public void connect() {
		System.out.println("IKBC C87 270 -/+ RMB");
	}
}

/**
 * 电脑类
 * 
 * @author Anonymous
 *
 */
class Computer {
	/**
	 * 电脑使用通过USB接口,连接USB设备
	 * @param usb USB接口,要求连接是一个USB设备
	 */
	public void useUSBInterface(USB usb) {
		// 通过USB设备执行connect方法,执行功能
		usb.connect();
	}
}

public class Demo2 {
	public static void main(String[] args) {
		// 电脑类对象
		Computer computer = new Computer();
		
		// Mouse是USB设备
		Mouse mouse = new Mouse();
		// Keyboard也是USB设备
		Keyboard keyboard = new Keyboard();
		
		// 电脑需要通过USB接口连接USB设备
		computer.useUSBInterface(mouse);
		computer.useUSBInterface(keyboard);
		
		// computer通过USB设备连接Mouse或者Keyboard类的子类是完全OK的
		// 因为这些子类也是USB设备
		computer.useUSBInterface(new Logi());
		computer.useUSBInterface(new IKBC());
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值