2017-01-12 9 views
0

まあこんにちは、ここに私の問題です。属性を変更するArrayList <Class>をArrayListに<SubClass>サブクラス

abstract class Fooを与え、場合、私は知りたいのですが、どういうわけか、その属性はArrayList<Bar>だけに、それはFooのすべてのサブクラスに含まれていたものの特定のサブクラスが含まれている(バーがあまりにも抽象的である)を取得することが可能です。例えば

は、具体的なclass FooChildextends Fooことで、属性ArrayList<Bar>は今だけで、具体的なclass BarChild(これextends Bar)が含まれています。具体的には

、私はコードのこの作品だ場合:

public abstract class CharactersGroup { 
    private ArrayList<Character> characters; 

    public CharactersGroup() { 
     this(new ArrayList<Character>()); 
    } 

    public CharactersGroup(ArrayList<Character> list) { 
     characters = list; 
    } 
} 

をそしてCharactersGroupのサブクラスでは、このように、HeroesGroup次のようになります。

public class HeroesGroup extends CharactersGroup { 
    // Here is an ArrayList<Character> characters, that I would like to "become" an ArrayList<Hero> characters 

    public HeroesGroup() { 
     this(new ArrayList<Hero>()); 
    } 

    public HeroesGroup(ArrayList<Hero> list) { 
     super(list); 
    } 
} 

Characterは同じように次のようになります。

Heroは次のようになります。

public class Hero extends Character { 
    private int level; 

    public Hero(String n, int l) { 
     super(n); 
     level = l; 
    } 
} 

答えて

0

あなたは抽象クラスCharactersGroup汎用作ることができます。

public abstract class CharactersGroup<C extends Character> { 
    private ArrayList<C> characters; 

    public CharactersGroup() { 
     this(new ArrayList<C>()); 
    } 

    public CharactersGroup(ArrayList<C> list) { 
     characters = list; 
    } 
} 

サブクラスは、次のようになります。

public class HeroesGroup extends CharactersGroup<Hero> { 

    public HeroesGroup() { 
     this(new ArrayList<Hero>()); 
    } 

    public HeroesGroup(ArrayList<Hero> list) { 
     super(list); 
    } 
} 
0

スーパークラスにジェネリックパラメータを使用します。

public abstract class CharactersGroup<C extends Character> { 
    private ArrayList<C extends Character> characters; 

    public CharactersGroup() { 
     this(new ArrayList<C extends Character>()); 
    } 

    public CharactersGroup(ArrayList<C extends Character> list) { 
     characters = list; 
    } 
} 

public class HeroesGroup extends CharactersGroup<Hero> { 
    // Here is an ArrayList<Character> characters, that I would like to "become" an ArrayList<Hero> characters 

    public HeroesGroup() { 
     this(new ArrayList<Hero>()); 
    } 

    public HeroesGroup(ArrayList<Hero> list) { 
     super(list); 
    } 
} 
関連する問題