2
public class Test {
    class Foo {
        int frob() {
            return 7;
        }
    }

    class Bar extends Foo {
        @Override
        int frob() {
            return 8;
        }
    }

    class Baz extends Foo {
        @Override
        int frob() {
            return 9;
        }
    }

    public static int quux(Bar b) {
        return b.frob();
    }

    public static void main(String[] args) {
        System.out.println(quux(new Bar()));//this line gives non-static variable this cannot be referenced from a static context
    }

}
4

3 に答える 3

3

これを修正するには、ネストされたクラスを静的として宣言するか、 TestのインスタンスのコンテキストでBarをインスタンス化します。

(非静的)バーは既存のテストクラスインスタンスのコンテキストでインスタンス化する必要があるため、失敗します。mainは静的であるため、そのような獣はありません。

于 2012-12-01T05:27:40.587 に答える
3
public static void main(String[] args) {
    Test test = new Test();
    System.out.println(quux(test.new Bar()));
}
于 2012-12-01T05:28:42.073 に答える
2

非静的内部クラスには、外側のクラス インスタンスへの非表示の参照があります。つまり、内部クラスを作成するには、囲んでいるクラスのインスタンスが必要です。また、隠し参照を囲んでいるクラスに正しく初期化する特別な「新しい」関数を使用する必要があります。例えば、

   class Outer{   
        class Inner{
           public Inner() {
               System.out.println("Hello there.");
           }
        }

        public static void main(String args[]) {
            Outer o = new Outer();     
            Outer.Inner i = o.new Inner();
        }
    }
于 2012-12-01T05:39:29.930 に答える