Java: как вызвать метод super из внутреннего класса на месте - PullRequest
20 голосов
/ 16 августа 2011

У меня есть базовый класс Foo с методом spam и классом Bar , который переопределяет spam . Мне нужно вызвать спам базового класса в методе некоторого объекта обратного вызова, который определен на месте:

public class Foo {
    public void spam() {
        // ...
    }
}

public class Bar extends Foo {
    @Override
    public void spam() {
        objectWhichRequireCallback(new Callback {
            @Override
            public void onCallback() {
                super.spam();
            }
        });
    }
}

Этот код не работает, поскольку super относится к Callback , а не Bar . Можно ли вызвать метод super из объекта, определенного на месте?

Ответы [ 3 ]

29 голосов
/ 16 августа 2011
public class Bar extends Foo {
    @Override
    public void spam() {
        objectWhichRequireCallback(new Callback {
            @Override
            public void onCallback() {
                Bar.super.spam();
            }
        });
    }
}

РЕДАКТИРОВАТЬ : Извините.Не понимаю, что имена методов совпадают.

3 голосов
/ 16 августа 2011

Для этого вы можете создать функцию-обертку в Bar

public class Bar...

    public void mySuperSpam(){
        super.spam();
    }
2 голосов
/ 16 августа 2011

Попробуйте это: Bar.super.spam();

Bar.this.spam(); скомпилировано, но это приведет к бесконечной рекурсии, потому что вы вызываете тот же самый spam ().

...