Вызовите метод в классе, даже если он был переопределен в подклассе (Java) - PullRequest
1 голос
/ 04 апреля 2011

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

public void callDo(FeelFreeToExtend ext){
    ext.do()
}

Где FeelFreeToExtend это:

public class FeelFreeToExtend {

    public void do(){
       System.out.println("DO");
    }

}

Теперь я знаю, что кто-то может переопределить метод do, но есть ли способ, которым я могу явно вызвать метод do в классе FeelFreeToExtend? Я не думаю, что это когда-нибудь будет отличной идеей, но все же интересно.

Ответы [ 3 ]

5 голосов
/ 04 апреля 2011

Нет, это невозможно без изменения байт-кода / кода всех вызывающих абонентов. Если вы хотите всегда вызывать FeelFreeToExtend.do (), сделайте метод финальным.

0 голосов
/ 18 января 2012

На самом деле то, что говорит Питер, не совсем правильно: на самом деле можно выполнить переопределенный метод с использованием JNI (http://java.sun.com/docs/books/jni/html/fldmeth.html#26109). В JNI есть метод с именем CallNonvirtual<Type>Method, позволяющий именно это.

Серверы приложений или интегрированные среды могут быть поставлены с небольшой утилитой JNI, чтобы обеспечить такие функции ...

Без JNI я не думаю, что это возможно.

0 голосов
/ 05 апреля 2011

Добавьте к методу квалификатор отсутствия доступа "final" (сделайте метод final), это предотвратит переопределение метода и, следовательно, эта версия метода будет вызываться всегда из любого из подклассов.

Во-вторых, если вы просто хотите получить доступ к методу суперкласса из производного класса, даже если метод суперкласса был переопределен, просто вызовите метод, добавив «super».до вызова метода. Например.чтобы вызвать метод «отображение» суперкласса из подкласса, используйте super.display ().(Это предполагает, что вы тот, кто кодирует подкласс)

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