实例化内部类的抽象类

时间:2012-11-23 04:21:30

标签: java static instance instantiation abstract

我有一个带有非静态非抽象内部类的抽象类,我必须从静态方法实例化。怎么办呢?

这基本上就是我想做的事情:

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();
        }
    }
}

我知道你无法实例化一个抽象类,并且你可以在没有外部类实例的情况下从静态方法实例化内部类,所以我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

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

public class TestProgram extends Program
 {

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

答案 1 :(得分:0)

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

更一般地说,我认为你的悖论是你的答案。你试图设计一些在语言限制范围内不起作用的东西,你必须放弃程序的抽象本质,或者让Window成为你可以在程序之外创建的类。

答案 2 :(得分:0)

为什么你的主要方法在abstract class

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

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