Можно ли вызвать переопределенный метод из супер из супер? - PullRequest
3 голосов
/ 26 ноября 2011

Предположим, у меня есть эти три класса:

class Foo {
    void fn() {
        System.out.println("fn in Foo");
    }
}

class Mid extends Foo {
    void fn() {
        System.out.println("fn in Mid");
    }
}

class Bar extends Mid {
    void fn() {
        System.out.println("fn in Bar");
    }

    void gn() {
        Foo f = (Foo) this;
        f.fn();
    }
}

public class Trial {
    public static void main(String[] args) throws Exception {
        Bar b = new Bar();
        b.gn();
    }
}

Можно ли назвать Foo fn()? Я знаю, что мое решение в gn() не работает, потому что this указывает на объект типа Bar.

1 Ответ

5 голосов
/ 26 ноября 2011

Это невозможно в Java.Вы можете использовать super, но он всегда использует метод в непосредственном суперклассе в иерархии типов.

Также обратите внимание, что это:

Foo f = (Foo) this;
f.fn();

- это само определение polymoprhism как работает виртуальный вызов: хотя f имеет тип Foo, но во время выполнения f.fn() отправляется на Bar.fn().Тип времени компиляции не имеет значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...