gpt4 book ai didi

java - 如何使这个 Java 接口(interface)灵活

转载 作者:搜寻专家 更新时间:2023-11-01 01:11:02 28 4
gpt4 key购买 nike

我有这个 Java 接口(interface):

public interface Box {
public void open();
public void close();
}

这个接口(interface)由这个类扩展:

public class RedBox implements Box {

public void open() {

}

public void close() {

}
}

问题是我希望在将来添加其他也将实现 Box 接口(interface)的类。这些新类将有自己的方法,例如其中一个类将有一个 putInBox() 方法,但是如果我将 putInBox() 方法添加到 Box 接口(interface),我也将被迫添加一个空的 putInBox( ) 方法到前面实现 Box 接口(interface)的类,如上面的 RedBox 类。

我将 putInBox() 添加到 Box 接口(interface),因为有一个类 Caller 接受实现了 Box 接口(interface)的类的对象,例如:

public class Caller {

private Box box;
private int command;

public Caller(Box b) {
this.box = b;
}

public void setCommandID(int id) {
this.command = id;
}

public void call() {

if(command == 1) {
box.open();
}
if(command == 2) {
box.close();
}

// more commands here...
}
}

Caller c = new Caller(new RedBox());

c.call();

我如何在新类中实现 Box 接口(interface),而不必被迫向每个以前实现 Box 接口(interface)的类添加新方法的空实现。

最佳答案

您不局限于单个界面 - 您可以构建整个层次结构!比如你可以制作这三个接口(interface):

public interface Box {
public void open();
public void close();
}
public interface LockableBox extends Box {
public void lock();
public void unlock();
}
public interface MutableBox extends Box {
public void putItem(int item);
public void removeItem(int item);
}

现在您的盒子可以实现适合您设计的层次结构中的接口(interface)。

public class RedBox implements LockableBox {
public void open() {}
public void close() {}
public void lock() {}
public void unlock() {}
}

public class BlueBox implements MutableBox {
public void open() {}
public void close() {}
public void putItem(int item) {}
public void removeItem(int item) {}
}

有了层次结构,您可以继续对接口(interface)进行编程:

MutableBox mb = new BlueBox();
mb.putItem(123);
LockableBox lb = new RedBox();
lb.unlock();

关于java - 如何使这个 Java 接口(interface)灵活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422243/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com