return не действует на наследника (Java)

115
14 февраля 2022, 23:50

Доброе время суток. Я столкнулся с такой проблемой, что у меня есть родительский класс и его наследник. В родительском классе у меня стоит условие if(isPaused) return; - т.е. если переменная isPaused = true, то метод должен прерываться. Но при этом в наследнике я вызываю super этого метода, и часть родительского метода не срабатывает, как и надо, а у наследника все продолжает работать. Может кто-то встречался с этой проблемой и знает как её решить?

Answer 1

Никакой проблемы в этом нет, если вы переопределяете метод, и в нем вызываете super(), то супер в этом месте и отрабатывает, но если у вас в переопределенном методе должно тоже что-то остановиться, то в нем так же делайте проверку if(isPaused) return; в нужном для вас месте. Используйте паттерн шаблонный метод.

 public sclass Helper extends HeS{
     public void act(float){
         super.act(delta);
         if(GameScreen.setPause) return;
         templateMethod();
     }
     public void templateMethod(){
     }
 }

в наследниках переопределяете templateMethod().

Шаблонный метод может быть абстрактный, может иметь реализацию по умолчанию - по необходимости. Абстрактным вы его можете сделать только в абстрактном классе. Преимущество абстрактного метода в том, что нельзя унаследовать класс не переопределив этот метод - компилятор будет ругаться.

READ ALSO
Как поменять шрифт кроме иконок?

Как поменять шрифт кроме иконок?

На сайте используется несколько шрифтов, нужно установить один, к примеру Montserrat, кроме иконок (на сайте так же есть inline стили, которые имеют...

152
Как выровнять блоки

Как выровнять блоки

Нужно выравнять 8 блоков в 2 колоныУ каждого блока width: 275px;

139
Почему не работает grid в media

Почему не работает grid в media

Не работает grid в media почему ?

106
Паттерны проектирования в популярных Open Source проектах

Паттерны проектирования в популярных Open Source проектах

Может кто-то привести список частых паттернов проектирования в Open Source проектах ? Таких как symfony или laravel ?

227