Страницы

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

суббота, 14 декабря 2019 г.

Какой уровень доступа получат переменные?

#java


объясните записи

1:

Object obj = new Object() {
    Integer id = 10;
    String name = "name";
};


2:

Object obj = new Object() {
    {
        Integer id = 10;
        String name = "name";
    }
};


в чем разница между этими записями?
в какую область видимости попадут переменные и какие модификаторы доступа они получат? 
    


Ответы

Ответ 1



Вы создаёте экземпляр анонимного класса, который является наследником класса Object с двумя новыми полями. Так как эти поля объявлены без модификаторов доступа, то они получат модификаторы доступа по умолчанию. Можно будет обращаться к этим полям как obj.id и obj.name. Вы создаёте экземпляр анонимного класса, который является наследником класса Object. Новых полей у этого класса нет, но есть так называемый Instance initialization block. Это такой блок, который будет выполнен при каждом создании экземпляра класса. Можно считать, что код внутри этого блока будет скопирован в начало каждого конструктора. Таким образом, переменные, объявленные внутри этого блока, являются обычными локальными переменными, и исчезнут после выхода из блока.

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

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