【问题标题】: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

    【讨论】:

    • 谢谢!甚至没有想过这样做:D
    【解决方案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() {
    
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 2012-04-12
      • 2013-06-18
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 2015-04-15
      • 2015-11-30
      相关资源
      最近更新 更多