Задать вопрос
@iskateli

Почему класс хранит 3 объекта?

пример из книги Брюс Эккель "Философия Java" (стр. 503):
class Automobile {}

public class Holder2 { 
private Object а;
public Holder2(0bject а) { this.a = а; }
public void set(Object а) { this.a = а; }
public Object get() { return а; }
public static void main(String[] args) {
  Holder2 h2 = new Holder2(new Automobile());
  Automobile а = (Automobile)h2.get(); 
  h2.set("Not an Automobile");
  String s = (String)h2.get();
  h2.set(1); // Автоматическая упаковка в Integer
  Integer x = (lnteger)h2.get();
}

Теперь в Holder2 можно хранить что угодно — в приведенном примере один класс
Holder2 хранит объекты трех разных типов.


О каких трёх объектах говорится? Я вижу только один созданный объект:
Holder2 h2 = new Holder2(new Automobile());
Подозреваю что h2.set("Not an Automobile"); и h2.set(1); неявно создают объекты, но тогда даже если это так, то ссылочная переменная Holder2 h2 же одна, если она начинает указывать на другой объект, то на старый уже ничто не указывает и он теряется. Я уже совсем запутался, помогите разобраться пожалуйста.
  • Вопрос задан
  • 95 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
Речь о том, что Holder2 может сохранить и вернуть объект любого типа, благодаря тому, что все объекты являются наследниками класса Object.
h2.set("Not an Automobile")
Сохраняет в холдере строку - объект типа String
h2.set(1)
Сохраняет в холдере 1 - которая сохраняется там как Integer
И да, вы всё правильно понимаете, предыдущие значения мы теряем.
Фразу
хранит объекты трех разных типов
нужно понимать, как "сохраняет" (в приведенном примере в один класс Holder2 сохранялись объекты трех разных типов), но хранился в каждый момент времени только один.
Из-за таких ошибок перевода и рекомендуют читать книги по программированию на языке оригинала.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
05 янв. 2025, в 07:48
2000 руб./за проект
05 янв. 2025, в 06:24
15000 руб./за проект
05 янв. 2025, в 06:22
15000 руб./за проект