需求:
面向对象思想设计一个电脑对象,可以使用鼠标和键盘。鼠标、键盘要求实现USB接口,实现接入、拔出功能,并具备独有功能 。鼠标有单击功能( click ),键盘有输入功能(input) 。
思路:
这个可以先写一个interface(接口)USB,里面定义两个抽象方法(public abstract自动省略),然后再分别写两个实现类键盘KeyBoard和鼠标Mouse。在里面重写连接、断开方法,并且重写自己的独有的方法。
然后因为新建接口的实现类对象,还不能使用KeyBoard和Mouse这两个实现类的独有方法。因此需要再写一个Computer类,里面传参面向接口的对象,然后用instanceof判断数据类型,若为KeyBoard和Mouse,则强转并使用里面的独有方法。
在测试类中使用多态的特性,前面写接口后面写实现类,USB m=new Mouse();这样就可以视为面向USB接口类型的对象,可以传参。再用m对象使用Computer类中方法,就能输出打印了。
代码
USB接口
public interface USB {
void connect();
void exit();
}
KeyBoard类
public class KeyBoard implements USB{//相当于另一种形式的继承父类
@Override
public void connect() {
System.out.println("连接上了键盘....");
}
@Override
public void exit() {
System.out.println("拔出了键盘....");
}
public void input(String a){
System.out.println("使用了键盘输入了:"+a);
}
}
Mouse类
public class Mouse implements USB{
@Override
public void connect() {
System.out.println("连接上了鼠标...");
}
@Override
public void exit() {
System.out.println("拔出了鼠标...");
}
public void click(){
System.out.println("使用了鼠标点击桌面..");
}
}
Computer类
public class Computer {
public void use(USB usb){
usb.connect();
if (usb instanceof KeyBoard){
((KeyBoard) usb).input("HelloWolrd");
}
if (usb instanceof Mouse){
((Mouse) usb).click();
}
usb.exit();
}
}
Test类
public class Test3 {
public static void main(String[] args) {
USB m=new Mouse();
USB k=new KeyBoard();
Computer c=new Computer();
c.use(k);
c.use(m);
}
}
加判断的代码
这是我查的一个,它是在Computer里定义了一个私有化变量,判断是否有接入的USB设备,感兴趣的可以看一下它加的判断
// USB 接口
interface USB {
void plugIn(); // 接入
void unplug(); // 拔出
}
// 鼠标类,实现 USB 接口
class Mouse implements USB {
@Override
public void plugIn() {
System.out.println("鼠标已接入电脑。");
}
@Override
public void unplug() {
System.out.println("鼠标已拔出电脑。");
}
// 鼠标的独有功能:单击
public void click() {
System.out.println("鼠标单击了一下。");
}
}
// 键盘类,实现 USB 接口
class Keyboard implements USB {
@Override
public void plugIn() {
System.out.println("键盘已接入电脑。");
}
@Override
public void unplug() {
System.out.println("键盘已拔出电脑。");
}
// 键盘的独有功能:输入
public void input(String text) {
System.out.println("键盘输入了内容:" + text);
}
}
// 电脑类
class Computer {
private USB usbDevice; // 当前接入的 USB 设备
// 接入 USB 设备
public void connectUSB(USB usbDevice) {
this.usbDevice = usbDevice;
usbDevice.plugIn();
}
// 拔出 USB 设备
public void disconnectUSB() {
if (usbDevice != null) {
usbDevice.unplug();
usbDevice = null;
} else {
System.out.println("当前没有接入的 USB 设备。");
}
}
// 使用鼠标的单击功能
public void useMouseClick(Mouse mouse) {
if (usbDevice instanceof Mouse) {
mouse.click();
} else {
System.out.println("当前接入的设备不是鼠标。");
}
}
// 使用键盘的输入功能
public void useKeyboardInput(Keyboard keyboard, String text) {
if (usbDevice instanceof Keyboard) {
keyboard.input(text);
} else {
System.out.println("当前接入的设备不是键盘。");
}
}
}
// 测试类
public class Main {
public static void main(String[] args) {
// 创建电脑对象
Computer computer = new Computer();
// 创建鼠标和键盘对象
Mouse mouse = new Mouse();
Keyboard keyboard = new Keyboard();
// 接入鼠标并使用单击功能
computer.connectUSB(mouse);
computer.useMouseClick(mouse);
// 拔出鼠标
computer.disconnectUSB();
// 接入键盘并使用输入功能
computer.connectUSB(keyboard);
computer.useKeyboardInput(keyboard, "Hello, World!");
// 拔出键盘
computer.disconnectUSB();
}
}