Новый объект не создан.
Приведение (Parent)
просто заставляет виртуальную машину интерпретировать person
как экземпляр Parent
. Если это не так, то будет выдано исключение ClassCastException.
Вы можете сделать:
Person person = new Parent();
, поскольку Person является суперклассом Parent, каждый экземпляр Parent также является экземпляром Person.
Но из person
нельзя использовать методы, определенные в Parent.
Parent parent = new Parent();
Person person = parent; // Ok, two instances to the the same object.
parent.setNumberOfSons(2); // Ok
person.setNumberOfSons(2); // Compile error, Person does not have that method (even if the instance is a person).
Parent parent2 = (Parent) person;
parent2.setNumberOfSons(2); // Ok
Обратите внимание, что при этом:
Person person = new Person();
Parent parent = (Parent) person;
Выдает исключение ClassCastException (объект не является экземпляром Parent).
Также, если Person не расширяет String, то это
String myString = new String();
Person person = (Person) myString;
будет ошибкой компиляции (хотя Person может быть Parent, String не может быть Person, так как один не расширяет другой).