我有两个类interfaceTestA和interfaceTestB。他们有 一个名为'myList'的arraylist和一个方法,'makeString()'在commom中。 MyList在名为hasList的接口中定义,而makeString是 在抽象类getTheData中实现。所以他们都延伸了 getTheData并实现hasList。例如,编译和运行 interfaceTestA工作得很好。特别是它可以访问myList。
但是现在,在一个名为ifTest的类中,我想实例化其中一个 两个只在运行时知道。我的问题是实例化时 这样,它不知道myList。查看列表。
import java.util.*;
interface hasList { ArrayList myList = new ArrayList(); }
//===
abstract class getTheData {
public String makeString() { return "Hi Mom"; }
}
//===
public class
interfaceTestA extends getTheData implements hasList
{
public interfaceTest() {
setString();
System.out.println("size= "+myList.size());
}
void setString() { myList.add(makeString()); }
public static void main(String[] args) {
interfaceTestA it = new interfaceTestA();
}
}
import java.util.*;
import java.lang.reflect.*;
public class
ifTest
{
public static void
main(String[] args)
{
Class prog = Class.forName("interfaceTestA");
getTheData gtd = (interfaceTestA) prog.newInstance();
System.out.println("myList size= "+gtd.myList.size());
}
}
答案 0 :(得分:0)
interfaceTestA
是hasList
的孩子,但getTheData
不是。在您的代码中,gtd
的类型为getTheData
,因此无法看到myList
。
答案 1 :(得分:0)
我找到了解决方案。创建一个结合两者的新抽象类,例如:抽象类组合扩展getTheData实现hasList。现在 声明gtd是组合类型,例如合并gtd =(interfaceTestA)prog.newInstance()。
它现在有效。谢谢你的帮助。