Переопределить методы, которые сделали final другим классом в иерархии классов - PullRequest
0 голосов
/ 19 октября 2018

Я сталкивался с такой ситуацией.

public class B{
    public final void run() {
    }
}

public class A extends B implements Runnable{
    //I want to implement Runnable's run method here.
    //But it does not allow as the run method in B is final
}

Может кто-нибудь подсказать, как мне этого добиться.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Что здесь важно: что A - это B или A - это Runnable?

Если это первое (или важно, чтобы оно было B и Runnable), вы ничего не можете сделать: B.run является окончательным, а окончание означает, что вы не можете переопределить его.

Если это последнее, используйте композицию:

class A implements Runnable {
  final B b; // initialize on field or in constructor.

  @Override public void run() {
    // Your implementation, calling methods/fields on b
    // where you need the behaviour/data of B.
  }
}
0 голосов
/ 19 октября 2018

К сожалению, вы не можете реализовать метод run в class A при данных обстоятельствах, как в class B, который является родительским классом class A, был объявлен метод run, и вы никогда не сможете переопределить final методы.

Вы можете изменить имя метода в class B или сделать метод не финальным.

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