package Demo18;
public interface USB {
public abstract void open();
public abstract void close();}
package Demo18;
public class Mouse implements USB {
@Override
public void open(){
System.out.println("打开鼠标");}
@Override
public void close(){
System.out.println("关闭鼠标");}
public void click(){
System.out.println("鼠标点击");}}
package Demo18;
public class Keyboard implements USB {
@Override
public void open(){
System.out.println("打开鼠标");}
@Override
public void close(){
System.out.println("关闭鼠标");}
public void type(){
System.out.println("键盘输入");}}
package Demo18;
public class Computer {
public void powerOn(){
System.out.println("笔记本电脑开机");}
public void powerOff(){
System.out.println("笔记本电脑关机");}
//使用USB设备的方法
public void useDevice(USB usb){
usb.open();
//向下转型,一定要先判断
if(usb instanceof Mouse){
Mouse mouse =(Mouse) usb;
mouse.click();}else if(usb instanceof Keyboard){
Keyboard keyboard =(Keyboard) usb;
keyboard.type();}
usb.close();}}
package Demo18;
public class DemoMain {
public static void main(String[] args){
//首先创建一个笔记本电脑
Computer computer = new Computer();
computer.powerOn();
//准备一个鼠标,供电脑使用
//Mouse mouse = new Mouse();
//首先是向上转型
USB mouse1 = new Mouse();//多态的写法
//参数是USB类型,
computer.useDevice(mouse1);
//创建一个USB键盘
Keyboard keyboard = new Keyboard();//没有使用多态的方法
//方法参数就是USB类型,传递进去的就是实现类对象
computer.useDevice(keyboard);//这样的写法也发生了向上转型
//使用子类对象,匿名对象,也是可以的
computer.useDevice(new Keyboard());//也是正确写法
computer.powerOff();}}
package Demo18;public interface USB { public abstract void open(); public abstract void close();}package Demo18;public class Mouse implements USB { @Override public void open(...