0

基本上,我想知道如何在 Java 中执行以下操作:

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

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

4

3 回答 3

2

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

不需要强制转换,因为 TestScript 在逻辑上是从 Script 扩展而来的 Script。

于 2013-11-02T18:49:00.537 回答
1

你的声明应该是 ArrayList<? super Script>

于 2013-11-02T18:49:53.183 回答
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 和一个 cast。

于 2013-11-02T18:50:32.660 回答