java向子类转换
当我这样做时:
Animal dog = new Dog();
如果狗是动物的一个子类,那么这个对象实际上是一个狗型的对象,它是否曾经暴露在这个系统中,或者它永远消失了?这个问题与Java和C有关,因为我假设它们是相似的,但为了清楚起见,让我们把重点放在C上
根据我的知识,我认为这个物体将永远被视为动物物体。Dog的属性和方法将被分配给对象实例,但我们永远不会知道它是从Dog类实例化的
你可以在下面搜索框中键入要查询的问题!
当我这样做时:
Animal dog = new Dog();
如果狗是动物的一个子类,那么这个对象实际上是一个狗型的对象,它是否曾经暴露在这个系统中,或者它永远消失了?这个问题与Java和C有关,因为我假设它们是相似的,但为了清楚起见,让我们把重点放在C上
根据我的知识,我认为这个物体将永远被视为动物物体。Dog的属性和方法将被分配给对象实例,但我们永远不会知道它是从Dog类实例化的
# 1 楼答案
在C#中,您可以检查wheter dog是否为dog using is的实例:
或用作:
# 2 楼答案
在Java中,您可以使用instanceof检查dog是否为dog的实例:
# 3 楼答案
通过将
Animal
的实例强制转换为Dog
,您可以访问Dog
的proerties/methods如果您不确定是
Dog
还是不-使用“软”铸造另一个问题——我们需要关心什么是具体类型的动物吗? 如果您关心-那么在这种情况下不应该使用继承
假设您有一个以
Animal
为参数的方法,这意味着您应该能够传递Animal
的任何派生类,并且您的方法将以预期的方式工作