Рекурсивно вызывать функцию на super

Я хочу рекурсивно вызвать метод на супер, для распространения вызова метода до последнего суперкласса. Этот псевдокод говорит, что я хочу сделать, но, конечно, это не компилируется в Java.

public MyClass {

    protected void method() {

        // do something on this level

        if (super instanceof MyClass) {
            MyClass superLevel = (MyClass) super;
            superLevel.method();
        }
    }
}

Как можно добиться такого поведения?


person WonderCsabo    schedule 27.08.2013    source источник
comment
Этот код должен быть помещен в суперкласс. В суперклассе можно написать if (this instance of MyClass) но ИМХО, это выявляет недостаток дизайна: суперкласс не должен знать своих подклассов.   -  person Arnaud Denoyelle    schedule 27.08.2013
comment
Единственный вариант — добавить super.method() вызов на каждом уровне. Вы можете вызвать метод непосредственного суперкласса только с помощью super.   -  person Rohit Jain    schedule 27.08.2013


Ответы (2)


Вы можете использовать:

public class MySuperClass {
    protected void method() {
         // Whatever you want to do in super class
    }
}

public class MyClass extends MySuperClass {
    @Override
    protected void method() {
         // Whatever you want to do in this specific class

         // Call super.method
         super.method();
    }
}

Вы можете использовать его таким образом в цепочке классов.

person BobTheBuilder    schedule 27.08.2013
comment
Почему минусуют без объяснения причин? - person BobTheBuilder; 27.08.2013
comment
Просто игнорируйте их, они недействительны. Продолжайте помогать :) - person Suresh Atta; 27.08.2013

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

и если вы можете редактировать родителей, вызовите super.method() на каждом уровне.

person dirtydexter    schedule 27.08.2013