2013-06-27 5 views
2

Есть ли способ пропустить иерархию наследования Java и метод вызова супер супер класса?Способ пропустить иерархию наследования и метод вызова супер суперкласса

У меня есть 3-х классы в Java

X 
Y extends X 
Z extends Y. 

Теперь есть ли способ, чтобы получить доступ к любому методу X непосредственно пропуск Y?

+0

Этот метод переопределяется в Y? –

+0

В C++ вы можете использовать разрешение области; в Java, не можете ли вы сделать что-то вроде 'z.X.method()' где z - объект типа Z, а метод() - это функция? – Bathsheba

+0

Да .. его задержка в Y –

ответ

3

Why is super.super.method(); not allowed in Java? Они утверждают, что вы не можете, и есть хорошая дискуссия о том, почему.

редактировать Я предполагаю, что вы ситуация, как Foo() определена в X и Y, и вы хотите, чтобы вызвать его из X в Z

0

Да, вы можете получить доступ ко всем методам X, кроме частных методов

2

Есть ли способ получить доступ к любому методу X, непосредственно пропускающему Y?

Практически нет, теоретически да. После вашего примера:

X 
Y extends X 
Z extends Y. 

При вызове метода Z, он будет вызывать super() который будет вызывать метод Y, если любой, и это будет вызывать super() тоже, который будет вызывать метод X в конце концов. Я сказал «да», когда метод Y ничего не отличается от X, тогда он как бы не имеет никакого эффекта. Но на практике JVM следует иерархии наследования для завершения вызовов, помните об этом.

1

Я думаю, вы могли бы использовать reflection API, но это своего рода уродливая ИМО.