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

できることは、抽象クラスを拡張するクラスを1つ作成するだけで、そのクラスで次のように内部クラスをインスタンス化できます。

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

最も簡単な答えは、Window オブジェクトのインスタンス化に使用できる Program の実装を作成することです。

より一般的には、あなたのパラドックスがあなたの答えだと思います。言語の制約内で機能しないものを設計しようとしており、Program の抽象的な性質を放棄するか、Window を Program の外で作成できるクラスにする必要があります。

于 2012-11-23T04:34:01.437 に答える
0

メインメソッドが の中にあるのはなぜabstract classですか?

ここでの大きな問題はデザインです。その Window クラスを内部クラスにするポイントは何ですか? 抽象クラス内からそのオブジェクトをインスタンス化する場合は、Window を独自のトップ レベル クラスにするだけです。

含まれているクラスからは何もアクセスしていないように見えるのに、なぜ内部クラスになっているのでしょうか?

于 2012-11-23T04:35:02.780 に答える