@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?
  • Вопрос задан
  • 1064 просмотра
Решения вопроса 1
@koperagen
При преобразованиях меняется только тип ссылки, которая ссылается на объект в памяти. Сам он навсегда остается того же типа, что при создании
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы