Подтвердить что ты не робот

Java: как вызвать супер метод из внутреннего класса на месте

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

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

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

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

4b9b3361

Ответ 1

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

ИЗМЕНИТЬ: Извините. DId не понимает, что имена методов одинаковы.

Ответ 2

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

public class Bar...

    public void mySuperSpam(){
        super.spam();
    }

Ответ 3

Попробуйте следующее: Bar.super.spam();

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