Вы не можете сделать это в Java. Прежде всего, super.super()
не имеет смысла. (super();
полезен внутри конструктора, но вне конструктора это ничего не значит.) Во-вторых, если у вас есть объект типа C
, вы не можете создать объектную переменную, которая является «тем же объектом, но типа A
», , и это то, что вы пытаетесь сделать. время выполнения Тип объекта всегда будет C
. Поэтому, даже если это законно:
public void method() {
A obj = this;
obj.method();
}
даже если obj
объявлен как тип A
, его «реальный» тип во время выполнения всегда будет C
, и приведенный выше код будет вызывать method()
в C
, что зацикливание ,
Вы можете method()
в C
вызова method()
в B
, как это:
public void method() {
super.method(); // calls the method in B
}
Но нет никакого способа, чтобы пропустить это и называют method
в A:
public void method() {
super.super.method(); // illegal
}
И если вы думаете, хочу сделать это, тогда вам, вероятно, нужно переосмыслить свой дизайн. Переопределяющий метод обычно либо вызывает метод родителя, либо добавляет что-то новое в него, либо делает что-то совершенно новое; обычно не имеет большого значения для того, чтобы добавить что-то новое к методу grandparent, но пропустить что-то новое, которое было добавлено в родительский метод. Если после всего этого вы действительно хотите это сделать, вы можете это сделать, добавив новый метод protected
в A с другим именем.
Вы попробовали запустить его? –
Заполните '' '' '' '' '' '' '' '' '' '' '' тем кое-чем легко идентифицируемым, как 'println' имени класса. Затем проверьте его, чтобы узнать, что происходит для вас. Если он даже не компилируется, ясно, что ответ на ваш вопрос «нет». Хотя, я бы предположил, что если 'C' должен использовать реализацию' A', он может быть более подходящим как подкласс 'A' напрямую. Если он использует вещи как из «A», так и «B», у вас, вероятно, слишком мало классов и должно нарушить общую функциональность в своей собственной структуре. – jpmc26
super.super(); - Ошибка компиляции – gowtham