2016-10-03 105 views
-1

我希望WIDTH和HEGHT從子類來計算如何使用子類的靜態字段的超類方法

public SuperClass{ 
    public Vector2 getCenter(){ 
     float x = this.position.x + WIDTH/2; 
     float y = this.position.y + HEIGHT/2; 
     return new Vector2(x, y); 
    } 

    public void setCenter(Vector2 position){ 
     float x = position.x - WIDTH/2; 
     float y = position.y - HEIGHT/2; 
     setPosition(new Vector2(x, y)); 
    } 
} 

我必須使用的寬度和高度靜電場對我的超級類的代碼,但它編譯錯誤導致超類仍然不知道WIDTH和HEIGHT在哪裏。我可以有在子類中重寫的靜態字段嗎?

回答

8

你不能那樣做。多態的整點在於超級類關於子類的一無所知

換句話說:依賴性僅向上流動。一個子類依賴於它的父類,但反之亦然。

如果在所有的,你可以做這樣的事情:

public abstract class SuperClass { 
    protected abstract int getWidth(); 

到那麼你的基類的算法中調用的getWidth();然後你的孩子必須實現這些方法 - 這就是你遵循開放/關閉原則實際進行適當的OO設計的方式。

所以,這裏的解決方案是:你退一步,做更多的OO設計閱讀;怎麼做;以及它如何與Java一起工作。並記錄:你真的想保持從使用靜態 - 這是一個異常在良好的面向對象設計;只有在你有充分的理由這樣做時才能使用!

+0

這節省了我的一天,非常感謝。 :) –