我正在尝试理解Java的向上转换。我刚刚创建了两个类Mom
和Girl
,每个类都有自己的构造函数(构造函数没有参数)。
如果我理解的话,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
类的实现。
这种机制被称为"多态性"。