Как предотвратить вызов абстрактного метода? - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть супер супер (прародительский) класс абстрактных бинов, вызывающий loadData() метод в его init() методе, подобном этому:

public abstract class BaseFwkPageController extends PageControllerSupport {

    public String init(){
        cleanSession();
        loadData();
        return initNavigation;
    }

    public abstract void loadData();

    // ...
}

теперь я не хочу, чтобы этот метод loadData() былвызывается в подклассе (дочерний).Я не могу изменить супер класс.Как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Вы не можете скрыть метод, уменьшить его видимость или запретить кому-либо звонить.

Однако вы можете сделать что-то подобное в своем подклассе:

@Override
public void loadData() {
  throw new UnsupportedOperationException("not supported");
}

В качестве альтернативы, вы можете добавить interface, выставляя только то, что может вызываться через интерфейс.

Interface interface = new Implementation();
interface.callMethod();

Таким образом, вы получите полный контроль.

2 голосов
/ 13 февраля 2012

Переопределите метод и передайте новое поведение дочернему классу. Вы могли бы просто

@Override 
public void loadData() {
    // do nothing.
}
0 голосов
/ 13 февраля 2012

Вы не можете запретить вызов метода у детей, так как метод общедоступен.Вы можете сосчитать каждый вызов метода в закрытой переменной экземпляра и выдать исключение, если оно было вызвано более одного раза (или сколько раз вы ожидаете).

Кроме того, необходимо пометить метод как final чтобы дети не могли переопределить этот метод и изменить поведение.

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