Как работает downcast в java

Я не могу никак понять как работает downcast в java. Я знаю что он работает в тех случаях, когда мы имеем дело изначально с upcast объектом. Типа если B extends A :

 A  myA = new B(); 
 B myB = (B) myA; //  такой даун каст прокатит.

Но я не могу понять как работают даун касты в подобных случаях когда мы имеем дело с классами из стандартных библиотек. Вот пример:

URL conn = new URL("https://www.google.com/");
URLConnection myConect = conn.openConnection();
HttpURLConnection http =(HttpURLConnection)  myConect; // Почему такое разрешается?

Подобное возможно потому что это базовые библиотеки или что? Метод openConnection() изначально возвращает URLConnection, поэтому объяснить это изначальным upcastom я не могу. Тогда почему это работает. В книги Шилдта когда я читал про Number, там было написано, что так как класс является convertible можно делать вещи типа:

Number n = 1; // хотя я так думаю это возможно из-за динамической обертки. Наверное по факту это выглядеть как Number n = new Integer
Integer nnn = (Integer) n;

Понятно. В классе URLConnection почему такое возможно? Короче, я запутался, господа. Если кто может доходчиво объяснить, буду благодарен. Если можно обьяснение именно на примере класса URLConnection


Ответы (0 шт):