【问题标题】:Override method from assigned class从分配的类中覆盖方法
【发布时间】:2015-11-01 17:26:32
【问题描述】:
我想覆盖已分配给变量的类中的方法。
例如:
inventory = new Inventory( );
/* Some code here that changes how inventory
must behave or whatever */
inventory
{
@Override ...
}
有可能吗???
【问题讨论】:
标签:
java
android
inheritance
overriding
【解决方案1】:
也许您会想到这样的事情(而不是 null-如果您可以实施默认策略以使其更干净):
public interface Strategy {
public void doSomething();
}
public class Inventory {
Strategy strategy;
public Inventory() {
// ...
}
public void doSomething() {
if (strategy == null) {
System.out.println("strategy is empty");
} else {
strategy.doSomething();
}
}
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
那么这个
Inventory inventory = new Inventory();
inventory.doSomething();
inventory.setStrategy(new Strategy() {
@Override
public void doSomething() {
System.out.println("strategy is now something different");
}
});
inventory.doSomething();
显示这个:
strategy is empty
strategy is now something different
有关更详细的版本,您可以查看strategy pattern。
【解决方案2】:
组合在这里肯定会有所帮助。与其重写一个方法来改变Inventory 的行为,不如将它传递给方法:
class Inventory {
private MyMethod method;
public void setMethod(MyMethod method) {
this.method = method;
}
public void doSomething() {
method.doSomething();
}
}
interface MyMethod {
void doSomething();
}
您现在可以通过setMethod切换MyMethod的实现:
Inventory inv = new Inventory();
//...
inv.setMethod(() -> {
//write method here
});
如果您不使用 Java 8,则必须继承 MyMethod:
inv.setMethod(new MyMethod() {
public void doSomething() {
}
});