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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽