2

我有一个带有非静态非抽象内部类的抽象类,我必须从静态方法实例化它。如何才能做到这一点?

这基本上是我想要做的:

abstract class Program
{
    private static Window window;

    public static void main(String[] args)
    {
        Program program = new Program();
        window = program.new Window();
    }

    abstract void Update();

    class Window
    {
        public Window()
        {
            //some code
        }

        public void someMethod()
        {
            Update();
        }
    }
}

我知道你不能实例化一个抽象类,你不能从一个没有外部类实例的静态方法实例化内部类,所以我不知道该怎么做。

4

3 回答 3

2

您可以做的只是创建一个扩展抽象类的类,然后在该类中实例化您的内部类,如下所示:

public class TestProgram extends Program
 {

  public static void main(String[] args)
   {
    Program program = new TestProgram();
    Window window = program.new Window();
  }
}
于 2012-11-23T04:41:03.347 回答
0

最简单的答案似乎是创建一个 Program 的实现,您可以使用它来实例化 Window 对象。

更一般地说,我认为你的悖论就是你的答案。您正在尝试设计一些在语言限制内不起作用的东西,您将不得不放弃 Program 的抽象性质或使 Window 成为您可以在 Program 之外创建的类。

于 2012-11-23T04:34:01.437 回答
0

为什么你的 main 方法在里面abstract class

这里更大的问题是设计。让那个 Window 类成为内部类有什么意义?如果您想从抽象类中实例化该对象,只需将 Window 设为自己的顶级类。

它似乎没有从它的包含类访问任何东西,那么为什么它是一个内部类呢?

于 2012-11-23T04:35:02.780 回答