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

Java: как вызвать super(). Super() в переопределенном методе (метод grandparent)

Возможный дубликат:
Почему супер .super.method(); не разрешено в Java?

У меня есть 3 класса, которые они наследуют друг от друга следующим образом:

A
 ↳
   B
    ↳
     C

Внутри каждого класса у меня есть следующий метод:

protected void foo() {
    ...
}

Внутри класса C Я хочу вызвать foo из класса A без вызова foo в B:

protected void foo() {
    // This doesn't work, I get the following compile time error:
    // Constructor call must be the first statement in a constructor
    super().super().foo(); 
}

ИЗМЕНИТЬ
Контекстная информация:
Класс B - это фактический класс, который мы используем. Класс C является классом unit test, он имеет некоторые модификации. foo метод внутри B делает некоторые вещи, которые нам не нужны, поэтому мы переопределяем его внутри C. Однако foo в классе A полезен и должен быть вызван.

4b9b3361

Ответ 1

  • Чтобы вызвать метод в суперклассе, используйте super.foo(), а не super().foo(). super() вызывает конструктор родительского класса.
  • Невозможно вызвать super.super.foo(). Вы можете добавить вызов super.foo() в класс B, чтобы вызов super.foo() в C вызывал super.foo() в B, который в свою очередь будет вызывать foo() в A.

Ответ 2

Это невозможно в Java. Вам нужно будет полагаться на B, предоставляя вам явный способ доступа к A foo.