Страницы

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

воскресенье, 15 декабря 2019 г.

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

#java


Почему выводится поле 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();
    }
}

    


Ответы

Ответ 1



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

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

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