1

例えば:

public class A {

public class B extends A {
}

public static void main(String[] args) {
    A a;
    a = new B();
}

}

同様の質問をいくつか検索したところ、「はい、スーパークラス型変数はサブクラスオブジェクトを参照できます」と表示されました。しかし、Eclipseでは、上記のコードで「タイプAの包含インスタンスにアクセスできません。タイプAの包含インスタンス(egxnew A()、xはAのインスタンス)で割り当てを修飾する必要があります」などのエラーが発生します。

では、何が問題なのですか?ありがとう!

4

2 に答える 2

3

答えは「はい」です。スーパークラスはサブクラスを参照できますが、間違った質問をしています。

Bは の囲まれたクラス( のインスタンスを持つには のインスタンスA持たなければならないことを意味します) であるため、このエラーが発生しますが、静的メソッドから参照しています (つまり、 のインスタンスではありません)。ABA

クラスに変更Bするだけです。static

public class A {

    public static class B extends A { // <-- Added static keyword
    }

    public static void main(String[] args) {
        A a;
        a = new B();
    }
}

エラーなし。

他のオプションは、それを囲まれたクラスのままにして、これを行うことです:

public class A {

    public class B extends A { // leave B as an enclosed class
    }

    public static void main(String[] args) {
        A a = new A();
        a = a.new B();  // can only create a B in the context of an A
    }
}
于 2012-06-01T03:50:31.303 に答える
-2

括弧をチェックしてください!! そのはず:

class A {
}
public class B extends A {


public static void main(String[] args) {
    A a;
    a = new B();
}

}

またpublic、コードには2つのクラスがあります!!

于 2012-06-01T03:48:26.660 に答える