基本上,我想知道如果Java可以执行以下操作:
public static ArrayList<Script> scripts = new ArrayList<Script>();
scripts.add(new TestScript()); //TestScript extends Script class.
我尝试了类型转换的一些不同的东西,并问我的一些朋友。没有人似乎有答案。但我知道这可能......也许吧?如果是这样,我该如何进行上述工作?如果没有,我还能做些什么来达到同样的效果?
答案 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和一个强制转换。