Могут ли ключевые слова this / super в Java представлять что-либо кроме классов / перечислений? - PullRequest
3 голосов
/ 21 января 2011

Я заметил, что:

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

Всякий раз, когда я использую ключевое слово this внутри анонимного класса, this относится к внешнему классу / enum, а не анонимному классу.

Означает ли это, что this никогда не может представлять анонимный класс? Просто "нормальные" классы и списки?

Кроме того, может this или super представлять интерфейс?

Ответы [ 5 ]

6 голосов
/ 21 января 2011

Ваше первоначальное предположение неверно - this всегда представляет текущий экземпляр, то есть экземпляр текущего класса, даже если он анонимный.

5 голосов
/ 21 января 2011

Ваше заявление об использовании this неверно. Когда вы используете this внутри анонимного класса, он всегда ссылается на анонимный класс. Он никогда не относится к внешнему классу, если вы не используете OuterClassName.this.

this или super никогда не могут представлять интерфейс, поскольку интерфейс не может иметь определенные методы.

0 голосов
/ 22 января 2011

Ваш анонимный класс всегда расширяет другой класс.Даже если вы явно реализуете интерфейс, вы расширяете java.lang.Object, и вы можете вызывать только методы java.lang.Object через super вызовы.

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
    }
};
0 голосов
/ 21 января 2011

В Java this всегда является текущим классом, даже если это анонимный класс.Нет, this или super не может представлять интерфейс.

0 голосов
/ 21 января 2011

Используйте A.this из внутреннего класса.

И он не может представлять интерфейс, потому что вы не можете определять какие-либо нестатические классы внутри интерфейсов, потому что никогда не будет экземпляра интерфейса.

РЕДАКТИРОВАТЬ: уточняется путем добавления информации из комментария.

...