Приведение типов. Почему это так работает?

Сейчас речь про C#, но я думаю, что это так работает и в других языках программирования.

class A: object
class B: A

Теперь получается, что можно сделать вот так

A a = new B();

А вот так сделать нельзя

B b = new A();

Но почему? Когда мы делаем вот так

new B();

В памяти выделяется место под все методы и поля, которые есть в классе B. А потом это кладется в переменную типа A, в которой не все эти методы и поля есть. Получается мы должны терять часть полей и методов, но нет. Почему? Всё буквально кричит о том, что в переменную типа B должно быть можно присваивать тип A. Потому что у типа В есть всё то же что и у типа А, но и ещё даже больше. Это как с переменной типа int 64 и int 32. Значение из типа int 32 можно поместить в переменную int 64, потому что оно поместится. А наоборот - нет. Тут же аналогичная история, но всё работает абсолютно не так. Почему?


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