运行时实例化的类无法访问它实现的接口

时间:2017-04-30 01:17:35

标签: java

我有两个类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());

  }
}

2 个答案:

答案 0 :(得分:0)

interfaceTestAhasList的孩子,但getTheData不是。在您的代码中,gtd的类型为getTheData,因此无法看到myList

答案 1 :(得分:0)

我找到了解决方案。创建一个结合两者的新抽象类,例如:抽象类组合扩展getTheData实现hasList。现在 声明gtd是组合类型,例如合并gtd =(interfaceTestA)prog.n​​ewInstance()。

它现在有效。谢谢你的帮助。