2016-06-14 4 views
0

継承を使用するのは理にかなっていると思われるケースがありますが、Javaでどのように実行するのが最適かわかりません。私はあなたがJavaでメンバーをオーバーライドすることはできませんことを理解し、しかし、あなたができれば、私は私の場合はこのように動作するように期待される:継承されたメンバーをJavaの特定のサブクラスに絞り込む

public class Y {...} 

public class Ytype1 extends Y {...} 

public class X { 
    public List<Y> ys; 
    ... 
} 

public class Xtype1 extends X { 
    public List<Ytype1> ys; 
} 

Xtype1は、YSのすべてのメンバーがYtype1されたXのタイプです。私は、Xtype1でysを使ってXtype1で実行できるysに依存するXのメソッドを望みますが、Ytype1であるすべてのYに依存するXtype1のメソッドを実装したいと思います。

私はYを追加するXのメソッドをオーバーライドすることを考えました。そのため、メソッドはYtype1ではないYでは機能しませんでしたが、不要な型キャスティングを避けることをお勧めします。

これを行う適切な方法はありますか?

答えて

0
は、あなたがこのを探しているよう

はサウンド:

public class Y {...} 

public class Ytype1 extends Y {...} 

public class X<T extends Y> { 
    public List<T> ys; 
    ... 
} 

public class Xtype1 extends X<Ytype1> { 
    // super.ys is now List<Ytype1> 
} 
+0

XとYは、次のように自分自身で完全に機能することができるようになります、または私はサブクラスを使用する必要があるのですか? – SudoNim

+0

@SudoNim 'X'はどのタイプの' Y'が有効な入力なのか分からないので、 'ys'に要素を追加するには' Xtype1'を使う必要があります。しかし、単にysから要素を繰り返したり読むのであれば、 'Y'を取得していることを保証して' X'から行うことができます。 – shmosel

+0

しかし、私は 'y'が' Y'の任意の型を受け入れる 'X'のインスタンスを持つことも望みます。 'X 'のように作ってインスタンス化できますか、あるいは 'Y'は技術的に' extend Y'ですか?私はジェネリックにはなじみがありません。 – SudoNim

関連する問題