2016-10-20 14 views
1

私はJavaクラスの割り当てを行っています。親クラスの子フィールドのフィールドを渡すことなくフィールドを参照する方法を見つけることができませんコンストラクタを介して例えばJava:親クラスの子供のフィールドを参照する

私は私の親クラスは、このメソッドを持ちたい:

@Override 
    public String getImageFileName() {  
     String result = IMG_DEAD; 
     if (isAlive()) { 
      result = IMG_ALIVE; 
     } 
     return result; 
    } 

私はすべての子供が異なるものがありますので、IMG_DEADとIMG_ALIVEの文字列は、私の子供に定義されていることにしたいです。

これを行うにはどのような方法が最適ですか?私は静的フィールドを使ってみましたが、私はいつも親のものを参照するだけです。

値をコンストラクタに渡すだけで動作するようになったが、より良い方法があればそれを行う必要はない。これらの変数は、クラスごとに一定であるため、静的でなければなりません。

+0

https://www.tutorialspoint.com/java/java_polymorphism.htm –

答えて

2

それぞれの子供がそれについて具体的に述べる必要があるように聞こえます。

@Override 
protected String imageFileName(boolean alive) { 
    return alive ? GRUE_IMG_ALIVE : GRUE_IMG_DEAD; 
} 

は、あなたがしたい場合:そのメソッドをオーバーライドし、あなたの子クラスで、

protected String imageFileName(boolean alive) { 
    return alive ? DEFAULT_IMG_ALIVE : DEFAULT_IMG_DEAD; 
} 

そして、これを行うための最善の方法は、通常、子供が優先されます親のメソッド、このようなものです〜子供からのイメージが必要ですが、デフォルトではなく、親メソッドabstractが代わりに使用されます。

+0

この問題は、私の子供たちが、私がこのメソッドを継承する目的を破っているような全く同じメソッドでこのメソッドをオーバーライドするという問題です。それに加えて、私がこれまでの方法を変えたければ、私はすべての子供たちにそれを変えなければならないでしょう。子どものフィールドをオーバーライドする方法がありましたが、メソッドをオーバーライドする必要はありません。 – BananaPineapple

+0

@RobertCordingly "全く同じメソッドで"オーバーライドするのは、*多態性の全体* *です。あなたは、必要に応じて各クラスの代用動作を提供します。フィールドをオーバーライドすることは重大な頭痛になり、あなたはまったく同じ仮想的な将来のメンテナンスの問題を抱えています。 – chrylis

関連する問題