Рассмотрим c1 - базовый класс c3. Код ниже работает отлично.Как работает классный кастинг?
c1 obj1=new c3();
c3 obj2=(c3)obj1;
Но Eсть ClassCastException в ниже одной
c1 obj1=new c1();
c3 obj3=(c3)obj1;
Что я пропустил?
Рассмотрим c1 - базовый класс c3. Код ниже работает отлично.Как работает классный кастинг?
c1 obj1=new c3();
c3 obj2=(c3)obj1;
Но Eсть ClassCastException в ниже одной
c1 obj1=new c1();
c3 obj3=(c3)obj1;
Что я пропустил?
Я думаю, что происходит то, что вы создаете obj1 как экземпляр c1, а затем пытаетесь передать его классу дальше по цепочке наследования, чем c1.
В первом примере c1 является базовым типом c3, поэтому вы можете создать экземпляр c3, где тип c1..что это прекрасно. c3 является дочерним элементом c1 и поэтому наследует все его свойства и методы.
Во втором примере, однако, вы создаете экземпляр c1 с типом c1. Затем вы пытаетесь передать его своему ребенку. У дочернего класса могут быть дополнительные свойства и методы, которых у родителя нет.
Подводя итог, ребенок может быть своего родительского типа и подвергать его воздействию, однако родитель не может быть его дочерним элементом и не может быть отлит как таковой.
Если вам нужно уточнить, то дайте мне знать.
Это очень помогло мне. Спасибо :) –
Добро пожаловать. Рад помочь :) –
@ Literallyluke, можете ли вы также включить разницу между «типом» и «экземпляром»? Что они на самом деле выводят? Например, c1 obj = new c3(); Здесь c1 является «типом», а c3 является «экземпляром». –