簡體   English   中英

我如何在超類方法中使用子類的靜態字段

[英]How do I use static field of subclass in super class method

我的超類上有一個代碼,希望子類的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的靜態字段,但是它編譯錯誤導致超類仍然不知道WIDTH和HEIGHT在哪里。 我可以在子類中覆蓋靜態字段嗎?

你不能那樣做。 多態的全部意義在於,超級類對子類一無所知

換句話說:依賴關系僅“向上”流動。 子類取決於其父類,但反之則不然。

如果有的話,您可以執行以下操作:

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

然后在基類算法中調用getWidth(); 然后您的子類必須實現這些方法-這就是您實際上遵循“ 打開/關閉”原理進行正確的OO設計的方式。

因此,這里的解決方案是:您退后一步,對OO設計進行更多閱讀; 怎么做; 以及它在Java中的實際工作方式。 記錄在案:您真的想遠離使用靜態方法 -在良好的OO設計中這是一個異常 僅在確實有充分理由時才使用!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM