接口是干爹(也当父类使用),继承是亲爹 ———— 所以都可以用来实现多态
这里创建的对象以多态(对象名的类型用父类,或者接口来接收)用继承的父类的方式创建,传入形参后:调用的方法是是构造器的方法USB u = new Keyboard(“双飞燕”);,调用的是键盘构造器;
package com.itheima.d4_polymorphic_test;
/**
* 目标:USB设备模拟
* 1.定义USB接口:接入 拔出
* 2.定义2个USB的实现类:鼠标、键盘
* 3.创建一个电脑对象,创建USB设备对象,安装启动
*/
public class Test {
public static void main(String[] args) {
// a。创建电脑对象(像java中要什么东西,就创建该东西的对象)
Computer c = new Computer("外星人");
c.start();
// b.创建鼠标对象,键盘对象
// 这里创建的对象以多态(对象名的类型用父类,或者接口来接收)用继承的父类的方式创建
USB u = new Keyboard("双飞燕");
c.installUSB(u); // 由于该方法创建时接收的形参是:接口,所以可以用多态
// installUSB里面有个形参.connect-- 将传入的形参(调用构造器的方法)
USB u1 = new Mouse("Acer鼠标");
c.installUSB(u1);
}
}
package com.itheima.d4_polymorphic_test;
/**
* USB接口 == 规范
*/
public interface USB {
// 接口定义的方法都是抽象方法,变量都是常量
// 接入 拔出
void connect();
void unconnect();
}
// 键盘类
package com.itheima.d4_polymorphic_test;
/**
* 实现类
*/
public class Keyboard implements USB{// 新建键盘类,实现接口
private String name;
public Keyboard() {
}
public Keyboard(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void connect() {
System.out.println(name + "连接了电脑");
}
/**
* 独有功能
*/
public void keyDown(){
System.out.println(name + "敲击了键盘");
}
@Override
public void unconnect() {
System.out.println(name + "成功从电脑中拔出了~");
}
}
// 鼠标类
package com.itheima.d4_polymorphic_test;
/**
* 实现类
*/
public class Mouse implements USB{ // 定义一个鼠标类实现USB功能
private String name;
public Mouse() {
}
public Mouse(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public void connect() {
System.out.println(name + "连接了电脑");
}
/**
* 独有功能
*/
public void dbClick(){
System.out.println(name + "双击小红心,一键三连");
}
@Override
public void unconnect() {
System.out.println(name + "成功从电脑中拔出了~");
}
}
电脑类用来创建方法(该方法的形参是接口类形参用来实现多态)
package com.itheima.d4_polymorphic_test;
public class Computer {
private String name;
public Computer() {
}
public Computer(String name) {
this.name = name;
}
public void start(){
System.out.println("开机了");
}
/**
* 提供安装USB设备的入口
*/
public void installUSB(USB usb){ // 接口可以理解为父类(干爹)
// 多态:usb == 可能是鼠标,也可能是键盘
usb.connect(); // 调用接口的功能 // 后面判断引用类型强转
//独有功能:先判断再强转
if (usb instanceof Keyboard){// 判断usb接口是被哪个实现类继承
Keyboard k = (Keyboard) usb; // 如果是键盘类就将use接口类型(引用)转换为键盘类
k.keyDown();
}else if (usb instanceof Mouse){
Mouse m = (Mouse) usb; //如果接口类型是鼠标类就转换为鼠标类
m.dbClick(); // 然后再调用独有方法
}
usb.unconnect();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}