2015-11-01 99 views
0

我想重寫已分配給變量的類的方法。
例如:從指定的類覆蓋方法

inventory = new Inventory(); 

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

inventory 
{ 
    @Override ... 
} 

是否有可能???

回答

1

也許你覺得這樣的事情(而不是空,如果你可以實現一個默認的策略,以使其更乾淨):

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

+0

謝謝!甚至沒有想過這樣做:D – Sw3das

1

組成肯定會在這裏幫助。而不是覆蓋的方法來改變Inventory行爲,通過它的方法:如果你沒有使用Java 8

Inventory inv = new Inventory(); 
//... 

inv.setMethod(() -> { 
    //write method here 
}); 

class Inventory { 
    private MyMethod method; 

    public void setMethod(MyMethod method) { 
     this.method = method; 
    } 

    public void doSomething() { 
     method.doSomething(); 
    } 
} 

interface MyMethod { 
    void doSomething(); 
} 

您現在可以通過setMethod切換的MyMethod實施,你必須子類MyMethod

inv.setMethod(new MyMethod() { 
    public void doSomething() { 

    } 
});