Не понимаю до конца как работают вот эти строки:
new Tree().info((Object) new Integer("4"));
s.getClass().getSimpleName());
Дерево № 1 , метод Object, параметр Integer
Почему в результате возвращается именно Integer, а не Object ?
enot
18 уровень
Дерево № 1 , метод Object, параметр Integer
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Павел Безумный учёный Expert
20 марта 2021, 23:37решение
На созданном объекте Tree производится вызов метода info(). В качестве аргумента в метод передаётся объект Integer, преобразованный к базовому типу Object. Другими словами, в метод передаётся всё тот же объект Integer, но часть информации о нём скрыта, и объект определяется как Object. Вызывается соответствующий перегруженный метод: info(Object s).
При формировании форматной строки в методе info() определяется точный тип объекта, передаваемого в аргументе: s.getClass().getSimpleName(). Хотя ссылка на объект s и хранится в переменной типа Object, сам объект всё же является экземпляром класса Integer, каковым он и был создан.
+3
enot
21 марта 2021, 08:22
Т.е. мы по сути так определяем ссылку, а тип объекта остаётся прежним?
0
Павел Безумный учёный Expert
21 марта 2021, 09:41
Сам объект всегда один и тот же. Тип объекта задаётся при его создании и не меняется в течение всего времени жизни. При помещении объекта в переменную типа суперкласса расширенная часть объекта "скрывается", и остаётся видна только его базовая часть.
+3
enot
21 марта 2021, 13:20
Теперь точно понятно, спасибо!)))
0
Павел Безумный учёный Expert
21 марта 2021, 13:36
На здоровье! 🙂
0