Самый простой ответ заключается в том, что, поскольку B является подклассом A, эта оценка может происходить нормально.
Указатель на базовый класс может очень просто указывать на производный класс, поскольку производный класс является экземпляромбазового класса.
Давайте расширим пример немного подробнее:
A m;
B n = new B();
m = n; // Valid statement
m = n является допустимым оператором, потому что мы можем назначить только объект A для m.Компилятор видит, что B является производным от A, поэтому в действительности он является объектом A.Если бы это был не связанный тип, компилятор кричал бы на вас.