2012-11-23 218 views
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(); 
     } 
    } 
} 

我知道你不能實例化一個抽象類,你不能實例從一個靜態方法內部類沒有外部類的一個實例,所以我不知道該怎麼做。

+1

您可以擴展抽象類和使用實例實例化你的內部類的具體子類 –

+0

你知道背後的原因,那你爲什麼還要這麼做呢? –

+0

或使用靜態內部類。然後你不需要外部類的實例來實例化它。 –

回答

0

最簡單的答案似乎是創建一個程序的實現,您可以用來實例化Window對象。

更一般地說,我認爲你的悖論就是你的答案。你試圖設計一些在語言限制內不起作用的東西,你將不得不放棄程序的抽象特性,或者讓Window成爲你可以在程序之外創建的類。

+0

是否可以創建Program的可能子類的實例? – Finke

+0

只要該類不是抽象的,並且您可以看到該類的構造函數,就可以創建任何類的實例。 我可能會逐字讀入您的文字,但您無法創建可能或可能不存在的可能子類的實例。 –

0

爲什麼你的主要方法在abstract class之內?

更大的問題在於設計。讓Window類成爲內部類是什麼意思?如果你想從抽象類中實例化那個對象,只需讓它成爲自己的頂級類。

它似乎無法訪問其包含的類中的任何內容,爲什麼它是內部類?

+0

基本上我想製作一個遊戲循環模板,你所要做的就是擴展程序類並實現這些方法,並且你將有一個簡單的遊戲循環 – Finke

1

你所能做的僅僅是創建能夠擴展你的抽象類,一類,並在類,你可以實例化內部類像以下:

public class TestProgram extends Program 
{ 

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