3

次のようなコードがあります。

public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    abstract void DoFoo();

    private class FooImpl extends Foo {
        public FooImpl() { }

        @Override
        void DoFoo() { }
    }
}

しかし、Eclipseは私に言っています。No enclosing instance of type Foo is accessible.では、どうすればこれを機能させることができますか?

コンパイルできるかどうかを確認するために、できるだけ単純にしようとしました。

public abstract class Foo {
    public static Foo getFoo() {
        return new FooImpl();
    }

    private static class FooImpl extends Foo {
        public FooImpl() { }
    }
}

そして、私はまだ同じエラーが発生します。私は何が欠けていますか?

修繕!return new FooImpl();行を次のように変更しましたreturn new Foo.FooImpl();

4

3 に答える 3

9

ここでの優れた説明- 簡単に言うと、 class を作成する必要があるため、外部クラスの特定のインスタンス(持っていない)FooImpl staticではなく、外部クラスにのみ関連付けられます。メソッドも静的であるように見えますが、そうでなければ、どのインスタンス呼び出す予定でしたか?getFooFoo

于 2009-12-08T02:30:56.010 に答える
2

人々にどのように電話するつもりgetFoo()ですか?

完全にファンキーでラディカルなことをしているのでない限り、それを作る必要がありますstatic

于 2009-12-08T02:31:32.323 に答える
1

クラスを作成すると動作しFooImplますstatic

于 2009-12-08T02:32:24.463 に答える