Страницы

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

четверг, 25 октября 2018 г.

Видимость переменных из анонимного класса

Почему выводится поле name = "main". И как сделать так, что бы выводилось "sout"?
public class Solution { private String name;
Solution(String name) { this.name = name; }
private String getName() { return name; }
private void sout() { new Solution("sout") { void printName() { System.out.println(getName()); System.out.println(name); } }.printName(); }
public static void main(String[] args) { new Solution("main").sout(); } }


Ответ

Создавая аннонимный класс, мы неявно наследуемся от класса Solution , соответственно, private поле и метод класса родителя в нем не виден, чтобы он стал доступен необходимо расширить область видимости и объявить их, хотя бы, protected

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

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