私のクラスは、私は両方のクラスのオブジェクトが他の一人一人と対話し、また、実際にIしたいので、私は、1つのアレイ内のSubOneとSubTwoの異なるオブジェクトを必要とこのsuperClassのオブジェクトにメンバー変数が存在するかどうかを確認しますか?
class SuperClass
{
protected boolean hasProperty;
}
class SubOne extends SuperClass
{
protected Property prop;
SubOne()
{
this.hasProperty=true;
this.prop=new Property();
}
}
class SubTwo extends SuperClass
{
SubTwo()
{
this.hasProperty=false;
}
}
のような方法で定義されています4つのサブクラスを持っています(例えばここでは2つだけを取りました)ので、それらをすべて単一のArrayに入れたいと思っていました。私は次のことを使用しました。
SuperClass[] superClass={
new SubOne(),
new SubTwo()
}
ループを反復しているうちに、次のように書くとエラーになります。私は息子を探すのに時間を費やしましたが、私はそれを見つけることができませんでした。
for(Superclass superObj:superClass)
{
if(superObj.hasProperty)
System.out.print(superObj.prop.something);
//when hasProperty is false, this statement should not be called,
//but compiler gives error
else
System.out.print("Something");
}
'SuperObj'を' SubOne'にキャストしようとしましたか? – RamenChef
@RamenChef私はこれを考えましたが、すべてのSubOneおよびSubTwoタイプのオブジェクトを単一の配列に格納しています。それで、SubOneまたはSubTwoにキャストするかどうかはどのようにわかりますか? –
'hasProperty'が真であるかどうかによって。 'instanceof'キーワードを使うこともできます。私は答えとして別の解決法を投稿しています。 – RamenChef