2016-10-03 2 views
-1

私は幅と高さの静的フィールドを使用する必要がはどのように私はスーパークラスのメソッドにサブクラスの静的フィールドを使用して行う

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とHEGHTをしたい私のスーパークラスのコードを持っていますが、それはコンパイルエラーの原因スーパークラスはまだWIDTHとHEIGHTがわからない。サブクラスでオーバーライドされた静的フィールドを持つことはできますか?

答えて

8

これはできません。多型の全体のポイントは、スーパークラスは子供のクラスについては何も知らないことです

他の言い方をすれば、依存関係は "上向き"にしか流れません。子クラスはスーパークラスに依存しますが、その逆もありません。

全く場合は、あなたがこのような何かを行うことができます。

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

、あなたのベースクラスのアルゴリズム内のgetWidth()を呼び出します。あなたの子供のクラスはこれらのメソッドを実装する必要があります。つまり、の開かれた原理に従った実際のOOデザインの実際の実装方法です。

ここでの解決方法は次のとおりです。オブジェクト指向設計についてもう少し読んでください。どうやってするの;実際にJavaでどのように動作するのかを説明します。そして、記録のために:あなたは本当にの静的なを使用することから離れてほしいと思う - それはの異常良いOO設計である;そうする本当に良い理由があるときにのみ使用すべきです!

+0

これは私の一日を節約し、たくさんありがとうございました。 :) –

関連する問題