为什么java的上行转换导致被覆盖的女孩方法被调用?



我正在尝试理解Java的向上转换。我刚刚创建了两个类MomGirl,每个类都有自己的构造函数(构造函数没有参数)。

如果我理解的话,Mom mom = new Girl()导致由new Girl创建的实例被转换为Mom类型,并且正在调用Mom构造函数这一事实证实了这一点。那么mom变量指向Mom实例,对吧?那么,为什么当我在Girl类中覆盖Mom方法test()时,它会导致调用Girl方法test()而不是Mom方法?这太令人困惑了:一边是Mom构造函数被调用,另一边是Girl方法被调用,就像mom变量可以访问两个类一样。

引用变量Mom mom可以引用Mom的任何实例或Mom的子类的实例。

在您的例子中,实例仍然是Girl-instance,它由Mom引用变量引用。您可以访问Mom(声明类型)的任何成员,但不能访问Girl的成员。但是由于该实例实际上是一个Girl实例,因此将执行Girl类的实现。

这种机制被称为"多态性"。

相关内容

  • 没有找到相关文章

最新更新