Как выполнить метод Java в абстрактном классе?

У меня есть метод в абстрактном классе, который может быть переопределен в расширенном классе или нет. Я хотел бы вызвать исходный (не переопределенный) метод. Как сослаться на него? Пример:

public abstract class A{

  protected MyResult my_method(){
    MyResult myResult;
    ...
    ... // Default implementation
    ...
    return myResult;
  }

 ...

 private void xy(){
   // I'd like to call my_method here
   if(!my_method().test()){
     // The function is not implemented well, I want ot use the original (abstract) method
     ...
     ... log a message for programmer
     ...
     this::A.my_method(); // I need something like this
   }
 }
}

Мне не нужны советы, как сделать это по-другому. Я только спрашиваю, есть ли синтаксис java для ссылки на методы или свойства в исходном классе или в удаленном суперклассе.


person Hink    schedule 30.10.2014    source источник


Ответы (1)


Я хотел бы вызвать исходный (не переопределенный) метод.

Вы не можете сделать это из вне подкласса. Из самого подкласса вы можете вызвать

super.my_method();

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

person Jon Skeet    schedule 30.10.2014
comment
Ваше предложение можно использовать в классе B, который расширяет A. Мне нужно вызвать его из метода, написанного в классе A. - person Hink; 01.11.2014
comment
@Hink: Вы не можете этого сделать. Если вы хотите вызывать код класса A из класса A, поместите его в метод final, чтобы подкласс не смог его переопределить. - person Jon Skeet; 01.11.2014
comment
Хорошо, я верю Тебе, я должен смириться с этим. - person Hink; 03.11.2014