2016-07-02 15 views
0

私は、クラスの子にあるブール変数(isBasic)の値をテストする必要のあるプログラムを持っています。例:親クラスへの参照によって子クラスのメンバー変数にアクセスできますか?

class Card{ 
    //some stuff here 
} 

class land extends Card{ 
    private boolean isBasic; 
    public void isBasic(){ 
     return isBasic; 
    } 
} 

class usesCards extends somethingElse{ 
    //initialize variables like SIZE 
    Card cardList = new Card[SIZE]; 

    public void addCard(Card card){ 
     if (card.isBasic()){ 
      //the rest 
     } 
    } 
} 

isBasic()メソッドがカードに存在しないことがわかります。私はそれが土地の特定の部分であるため、それがカードに存在すべきだとは思わない。カードの他の子供はその変数を持つべきではありません。私はそれをカードに入れて、各子供に重要な変数のみを使用する必要がありますか?isBasicをLandで初期化してカードから外してもいいですか?

答えて

0

基本クラスのオブジェクトに派生クラスのメソッドを使用することはできません。最初にcardオブジェクトに対してクラスチェックを実行する必要があります。 Cardオブジェクトが同時にLandである場合はisBasicメソッドしか使用できません。したがって、object castingを実行する必要があります。

this is a recommended naming convention in Javaのように、クラス名をPascalCaseに変更しました。

class Card { 
    //some stuff here 
} 

class Land extends Card { 
    private boolean isBasic; 
    public void isBasic(){ 
     return isBasic; 
    } 
} 

class UsesCards extends SomethingElse { 
    //initialize variables like SIZE 
    Card cardList = new Card[SIZE]; 

    public void addCard(Card card){ 
     // Checking card's actual class. 
     if (card instanceof Land && ((Land)card).isBasic()){ 
      //the rest 
     } 
    } 
} 

Here Javaでは継承について詳しく読むことができます。

+0

ありがとうございました!それはまさに私が必要としていたものでした。私はキーワード "instanceof"を忘れていました。 – comphunter159

関連する問題