2017-03-20 236 views
-2
ClassA 
{ 

} 

ClassB : ClassA 
{ 

} 

实例子类的对象,我可以做为什么我们不能从父类

ClassA objA = new ClassB(); 

但为什么我不能做反向

ClassB objB = new ClassA(); 

究竟发生在后台?编译器如何对待它?

+3

你的意思是在这里放置一些继承吗?我在“ClassA”是基类的基础上回答了这个问题,但没有仔细阅读你的问题。 – Bathsheba

+0

没有继承:'ClassA objA = new ClassB();'也是行不通的。 –

+0

你忘了继承一些东西?当前的代码不会编译,也不会*“我可以做”*部分将工作。 – Sinatr

回答

0

因为编译器自动将派生类转换为基类 - 它只是将其解释为基类的对象,而忽略其他属性。但是要将对象转换为派生类,它以前一定是该派生类的对象,编译器希望您明确定义该类。但即使你明确地定义了转换,它也不会工作,因为该对象从来不是派生类型的。

相关问题