Страницы

Поиск по вопросам

четверг, 20 июня 2019 г.

Как вызвать метод объявленный из абстрактного класса в инициализации этого класса

Есть абстрактный класс, который имеет метод public void SomeMethod() {} Как при объявлении объекта класса вызвать этот метод из переопределенного?
private static void AbstrClassInit() { Dialog abstrClass = null; // Если тут final, то (1), если нет (2) abstrClass = new AbstrClass() { //(1) Cannot assign a value to final variable @Override public void EscapeAction() { abstrClass.SomeMethod(); //(2) Variable 'abstrClass' is accesed from within inner class, needs to be declared final }; }


Ответ

Вы изначально инициализируете переменную значением null после этого, если он финальная, её нельзя переинициализировать. Таким образом вам надо сразу инициализировать переменную экземпляром класса и сделать её финальной для доступа из внутреннего класса.
При этом вы вообще пытаетесь при определении класса вызвать метод его экземпляра... Это вы что-то не то делаете. Вам надо просто вызвать метод через this, коий и является ссылкой на экземпляр вашего класса.
private static void AbstrClassInit() { final Dialog abstrClass = new AbstrClass() { @Override public void EscapeAction() { this.SomeMethod(); }; }

Комментариев нет:

Отправить комментарий