Вы пытаетесь сделать что-то странное. И я думаю, что ваш пример не соответствует вашему вопросу. Вы хотели реализовать ConcreteController в ControllerBase? Вместо того, чтобы оба они распространялись на Controller?
Тег @before является тегом конкретного класса. Только тот в конкретном классе будет выполнен.
Вы можете @ переопределить исходную функцию, но я не думаю, что это то, что вы искали.
Лучший способ получить то, что вы хотите, это удалить @before из аннотации и вызвать из конкретной функции реализованную функцию, которую вы хотите запустить.
public abstract class ControllerBase extends Controller {
static void foo() {
// this actually gets called
}
}
public static class ConcreteController extends Controller {
@Before
static void bar() {
foo();
// This DOES NOT get called
}
public static void index() {
render();
}
}