在Java中,如果一个子类覆盖(Override)了父类的一个方法,并且子类中有一个与父类被覆盖方法签名完全相同,但是返回类型为子类类型的方法,若将子类对象向上转型为父类引用,通过父类引用调用该方法,则会发生什么?

答案解析

选项A错误:当子类覆盖了父类的方法时,即使使用父类引用指向子类对象,调用的也是子类覆盖后的方法,而不是父类的方法。选项B错误:Java中方法的覆盖(Override)遵循协变返回类型规则,即子类覆盖方法的返回类型可以是父类方法返回类型的子类型,故返回值并非一定是父类类型。选项C正确:此情景符合方法覆盖的动态绑定特性,运行时会调用子类覆盖的方法,并且由于协变返回类型规则,会返回子类类型。选项D错误:Java支持协变返回类型,只要子类方法的返回类型是父类方法返回类型的子类即可,因此不会有编译错误。
正确答案:C
随机推荐
开始刷题