Страницы

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

воскресенье, 21 октября 2018 г.

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

объясните записи
1:
Object obj = new Object() { Integer id = 10; String name = "name"; };
2:
Object obj = new Object() { { Integer id = 10; String name = "name"; } };
в чем разница между этими записями? в какую область видимости попадут переменные и какие модификаторы доступа они получат?


Ответ

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

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

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