2017-02-11 17 views
-2

から変更すると、これはちょっと変わったかもしれませんが、スーパークラス変数の値を設定し、サブクラスになるように設定したいと考えています。たとえば、SpriteBodyという抽象クラスがあり、defというメソッドでは、変数bodyTypeBlock内に定義されているものに設定したいのですが、SpriteBodyのように何かできますか? スーパークラスの値を設定し、スーパークラスのメソッドで変数を使用することで、これを行うことができますが、最初の方法でコードを書くことができます。Javaのスーパークラス変数を継承クラス

+1

サンプルコードを表示できますか?コメントを追加してみてください。 –

+0

現在のコードはどのように機能しませんか?それを示してください。 –

+0

スーパークラスで定義された保護されたインスタンス変数は、サブクラスによって継承されるため、アクセスするために特別な操作を行う必要はありません。 –

答えて

1

抽象スーパークラスは、実装するサブクラスの抽象メソッドを宣言できます。たとえば、次の継承は地雷原のビットであり、この種のアプローチは、それは非常に難しいことを確認することができますベースクラスと子クラスの間の複雑なカップリングにつながることができ、言っ

public abstract class SpriteBody { 
    private BodyType bodyType; 

    protected abstract BodyType determineBodyType(); 

    public void def() { 
     bodyType = computeBodyType(); 
    } 
} 

public class Block extends SpriteBody { 
    @Override 
    protected BodyType determineBodyType() { 
     // ... TODO ... 
    } 
} 

すべての子クラスが正しく動作し、正しい不変量を保持しています。したがって、上記は完全に有効ですが、継承ではなく合成を使用して目標を達成できるかどうかを見直す価値があります。

関連する問題