Я пытаюсь прояснить это, поэтому я полностью понимаю, каков тип. Пожалуйста, поправьте меня на что-то неправильное, поскольку я сам изучаю Java уже около 2 месяцев в очень медленном темпе.Тип литья/впускавание в Java
Предположим, я создал класс под названием SubObject. И я знаю, что все классы, которые не имеют прямого явного суперкласса, считаются подклассами класса Object.
Object obj1 = new SubObject();
SubObject subObj1 = (SubObject) obj1;
System.out.println(subObj1); //prints out com.examplePackage.SubObject1234e1234;
Так что я успешно downcasted ссылки базового класса (Object) для его производного класса (подобъект). Однако ...
Object obj2 = new Object();
SubObject subObj2 = (SubObject) obj2;//this throws the ClassCastException error.
Мое понимание ошибки ClassCastException является то, что он унаследовал RuntimeException поймать его во время компиляции, чтобы показать, что код попытался бросить объект к подклассу, которого он не является экземпляром. Поскольку subObj2 НЕ является экземпляром SubObject, а скорее Object, он несовместим.
У меня есть 2 вопроса: 1. Есть ли недостатки/ошибки в моем понимании? 2. В какой ситуации на самом деле используется downcasting? Спасибо всем за помощь.