将对象/类添加到具有不同类型的列表中

时间:2013-11-02 18:48:28

标签: java list class object arraylist

基本上,我想知道如果Java可以执行以下操作:

public static ArrayList<Script> scripts = new ArrayList<Script>();
scripts.add(new TestScript()); //TestScript extends Script class.

我尝试了类型转换的一些不同的东西,并问我的一些朋友。没有人似乎有答案。但我知道这可能......也许吧?如果是这样,我该如何进行上述工作?如果没有,我还能做些什么来达到同样的效果?

3 个答案:

答案 0 :(得分:2)

TestScript应该是Script的子类。对象的集合可以保存同一个类及其所有子类的对象。

不需要强制转换,因为TestScript在逻辑上是一个脚本,因为它从Script扩展。

答案 1 :(得分:1)

您的声明应为ArrayList<? super Script>

答案 2 :(得分:0)

是的,这会有效。你会这样做:

public static ArrayList<Script> scripts = new ArrayList<Script>();
scripts.add(new TestScript()); //TestScript extends Script class.

并遍历,

for( Script scr : scripts){
    scr.someMethodOfScript(); //no testscript methods available
    if(scr instanceof TestScript){
        TestScript tscr = (TestScript) scr;
        //call TestScript methods on tscr
    }
}

对于Script中没有的任何TestScript方法,您需要一个instanceof和一个强制转换。