从指定的 class 覆盖方法

Override method from assigned class

我想覆盖 class 中已分配给变量的方法。
例如:

inventory = new Inventory( );

/* Some code here that changes how inventory
must behave or whatever */

inventory
{
    @Override ...
}

可以吗???

也许您会想到这样的事情(而不是 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

作文在这里肯定有帮助。与其重写方法来改变 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() {

    }
});