2015-03-27 3 views
2

(Просто теоретический вопрос, я не вижу прямое практическое применение)Есть ли способ вызвать родительский родителя в Java

Есть ли способ сделать что-то вроде:

super.super.someMethod() 

В Java?

super.someMethod() 

Существует, почему бы не иметь возможность вызвать суперкласс суперкласса?

(конечно, вы можете создать метод:

protected void someSuperMethod(){ 
    super.someMethod(); 
} 

В суперкласса и вызывать, что в классе ребенка, имеющего тот же эффект, но есть прямой способ сделать это и, если нет, почему?)

С.

ответ

0

Существует несколько уродливые обходной путь, но они не должны использоваться, как это плохая практика.

Когда вы наследуете объект, это нормально, но вы не должны иметь прямого доступа к родительскому объекту этого объекта, так как изменение его поведения также может изменить поведение вашего первого родителя.

Обходной путь, который вы предложили, в порядке, так как это метод, который определен в самом родительском, поэтому он не изменяет поведение, поскольку родительский доступ к нему принадлежит самому родительскому, а не к тому, чтобы дочерний элемент получал доступ к нему grand-parent в обход его первый родитель.

Это главным образом, почему нет прямого способа сделать это. Если вы хотите получить доступ к чему-то в grand-parent, тогда это должно быть сделано в первом родительском вместо этого, а в вашем ребенке вы укажете родительскому лицу доступ к нему родительским.

Предположит, вы определить объект типа A, B и C.

  • Б простирается А, В и С простирается Б.
  • И А и В имеют один и тот же метод, с различными проверками.
  • Поскольку C расширяет B, вызов метода должен использовать валидацию B, а не A.
  • Используя super.super, вы можете напрямую вызвать метод в A и пропустить проверку B, которая нарушит защиту/правило наследования ,