@Aleksey2411

Как работает нисходящее преобразование в Java?

Не до конца понял, как работает нисходящее преобразование в Java. Можете подробно объяснить, почему нет потери информации, когда мы выполняем сначала восходящее, а потом нисходящее преобразования?

class Mother {
    private final String MothersName;
    public Mother(String MothersName) { this.MothersName = MothersName; }
    public String getMothersName() { return MothersName; }
}

class Child extends Mother {
    private final String name;
    public Child(String name, String mothersName) {
        super(mothersName);
        this.name = name;
    }
    public String getName() { return name; }
}

public class Main {
    public static void main(String[] args) {

        Mother mother = new Child("John", "Amanda");
        Object obj = mother; // Восходящее преобразование, все работает как надо

        /*
        Нисходящее преобразование.
        По моей логике ( видимо ошибочной ), должна быть потеря информации.
         */
        Mother newMother = (Mother) obj;
        Child newChild = (Child) obj;

        System.out.println(newMother.getMothersName()); // Output: Amanda
        System.out.println(newChild.getName()); // Output: John
    }
}


Значит ли это, что во время выполнения тип "obj" воспринимается, как тип присвоенного ему объекта, который ниже по иерархии, и только компилятор воспринимает его, как Object?
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
@koperagen
При преобразованиях меняется только тип ссылки, которая ссылается на объект в памяти. Сам он навсегда остается того же типа, что при создании
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ростов-на-Дону
от 100 000 до 180 000 ₽
XCritical Software Санкт-Петербург
До 370 000 ₽
29 сент. 2020, в 01:42
5000 руб./за проект
28 сент. 2020, в 22:46
1500 руб./за проект
28 сент. 2020, в 22:42
5000 руб./за проект