Вы хотите знать, почему мы используем явное приведение типов.
это все о наследовании -
Позвольте мне прояснить это -
Предположим, у нас есть два класса Класс A и Класс B . И Класс B является подклассом класса A . Это означает, что Класс B имеет все функциональные возможности Класс A , это означает, что Класс B может делать все, что может Класс A .
Так что если
A a = new B();
прекрасно, потому что Класс B может делать то, что может Класс A .
Здесь ссылка varaible a имеет тип класса A, из которого будет вызываться метод класса A. Теперь объект B (new B ();) обладает всеми функциональными возможностями: Класс A (как Наследование), поэтому все методы Класс A будут задействованы.
Если мы изменим условие следующим образом ->
B b =new A();
Невозможно, потому что Класс B может реализовывать свои собственные функции (методы и переменные), которых нет в Класс A . Но здесь ссылочная переменная имеет тип B , все функции класса B будут активированы, но фактический объект имеет тип A , поэтому возникнет ошибка.
Тот же случай с Объект класса . Поскольку все остальные классы автоматически наследуют Объект Класс.
Поэтому, когда любому объекту, имеющему ссылочную переменную типа Class Object, требуется явное приведение, потому что это не уверенно, какие более или менее функциональные возможности содержатся в этом объекте.