3

私はそれに気づきました:

class A {
    ClassB b = new ClassB() { // anonymous class
        /* some expression using this */
    }
}

this匿名クラス内でキーワードを使用する場合は常に、匿名クラスでthisはなく、囲んでいる外部クラス/列挙型を参照します。

thisこれは、匿名クラスを表すことができないという意味ですか?ただ「通常の」クラスと列挙型?

また、インターフェースを表すことはできますthisか?super

4

5 に答える 5

6

最初の仮定は間違っています-this匿名であっても、常に現在のインスタンス、つまり現在のクラスのインスタンスを表します。

于 2011-01-21T19:43:12.627 に答える
5

使用に関するあなたの声明thisは正しくありません。this匿名クラス内で使用する場合、常に匿名クラスを参照します。を使用しない限り、囲んでいる外部クラスを参照することはありませんOuterClassName.this

thisまたはsuper、インターフェイスにメソッドを定義できないため、インターフェイスを表すことはできません。

于 2011-01-21T19:44:49.773 に答える
0

A.this内部クラスから使用します。

また、インターフェイスのインスタンスが存在しないため、インターフェイス内に任意の非静的クラスを定義できないため、インターフェイスを表すことはできません。

編集:コメントから情報を追加することで明確になりました。

于 2011-01-21T19:42:01.333 に答える
0

匿名クラスは常に別のクラスを拡張します。インターフェイスを明示的に実装している場合でも、拡張しているため、 via呼び出しjava.lang.Objectのメソッドのみを呼び出すことができます。java.lang.Objectsuper

Runnable r = new Runnable() {
    public void run() {
        super.run(); // Error: run() is not a method of java.lang.Object
        super.toString(); // OK: toString() is inherited from java.lang.Object
    }
};
于 2011-01-21T22:31:15.213 に答える
0

Java ではthis、匿名クラスであっても常に現在のクラスです。いいえ、thisまたはsuperインターフェイスを表すことができません。

于 2011-01-21T19:58:10.350 に答える