Не до конца понял, как работает нисходящее преобразование в 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?