2016-03-26 5 views
3

私はこのクラスにCardというクラスがあります。このクラスにはImageがあり、このクラスとそのクラスも継承しているいくつかのクラスがあります。親クラスの変数型を変更しました

私はImageクラスを親クラスのCardクラスではなくImageクラスに拡張する新しいクラスを作成することにしました。しかし、このため、Image変数で渡されている他のすべてのクラスが混乱しています。

古いImageクラスのすべてのインスタンスを新しいCardImageクラスに変更する必要がありますか、それとも別の方法がありますか?

例:

public class A { 
    private Image image; 

    public A(Image image){ 
    this.image = image; 
    } 
} 

public class B extends A{ 

    public B(Image image){ 
    super(image); 
    }  
} 

public class CardImage extends Image{ 
    public CardImage(){ 

    } 
} 
+0

与えられたコードの 'A'と' B'のコンストラクタに 'CardImage'インスタンスを渡すことができます。正確に何が「混乱」しているのですか? – schwobaseggl

+0

どのように他のすべてのクラスを台無しにしていますか?すべてのCardImageオブジェクトがImageオブジェクトであるため、今ではそれが機能するはずです –

+0

CardImageクラスのイメージ変数をCardImageクラスに変更しようとすると、互換性のない型が返されました – bob565

答えて

1

また、あなたが正しいクラスを拡張してください。しかし、クラスAだけがCardImageを使用する場合は、何も変更しないでください。 ImageをにCardImageにキャストして使用してください。それぞれCardImagesImageであるため、コンパイラはパラメータタイプを変更することを求めません。

public class A { 
    private Image image; 

    public A(Image image){ 
    this.image = image; 
    } 

    public void methodWhichNeedsCardImage() { 
    if(image instanceof CardImage) { 
     CardImage cImage = (CardImage) image; 
    } 
    } 
} 
+0

こんにちは、返信いただきありがとうございます。私は以前これを試しましたが、エラー "Exception in thread"が発生しました。java.lang.ClassCastException:com.badlogic.gdx.scenes.scene2d.ui.Imageをキャストできませんcom.mygdx.cards.CardImage " – bob565

+0

それから、' instanceof'を使用してください。 'CardImage'を使って' A'クラスを作成していないようです。 – rdonuk

+0

これは完了です!ありがとうございました。 – bob565

1

良いソフトウェアのデザインをあなたのコードにカスケード変更を加える必要が生じたときに頭痛やエラーが保存されます。あなたが思っているのであれば、「ちょっと、これを少し変えれば、私はXYZクラスへのすべての参照を変更しなければならないでしょう。あなたの質問に今

:それは相続になるとImageを拡張することはCardImageのすべてのインスタンスがImage自身であることを意味します。したがって、例のようにAまたはBクラスのコンストラクタにCardImageを渡すことは完全に有効です。

注:Imageクラスを拡張する場合、あなたはその方法契約(例えばhashCode方法を)尊重、そのメソッドをオーバーライドする場合とき/、あなたは注意する必要があります。スーパークラスの契約を尊重している限り、あなたの拡張はあなたのコードを壊すべきではありません。あなたのすべてのクラスは、それらのすべてを変更することが意味のあることができ、その後のみCardImagesを使用する場合com.badlogic.gdx.scenes.scene2d.ui.Image

+0

こんにちは、私が当初考えていたことですが、Image変数を変更しようとすると、互換性のないタイプのエラーが出ました。 – bob565

関連する問題