gpt4 book ai didi

Java继承

转载 作者:行者123 更新时间:2023-12-01 19:17:36 26 4
gpt4 key购买 nike

类 C 有一个不带参数的 void 方法 m。另一个类 D 扩展了 C 并覆盖了 m。每个类都有一个不带参数的构造函数。在下面的每一项中,请说明是否合法,如果合法,将使用 m 的哪个定义。

i) C x = new D();
x.m();

ii) D x = new C();
x.m();

我认为 i 是合法的,ii 并不违法。不知道我是如何解决这个问题的,欢迎任何提示。

最佳答案

回答这个问题的最好方法是编写一些代码,看看会发生什么。在 m 的实现中使用 System.out.println("method Called from C"); 来告知调用哪个实现。话虽如此,重写方法的全部目的是为了使用新的实现。如果您的对象属于C 类型,则将调用C 的方法。如果您的对象属于 D 类型,则无论引用是什么类型,都会调用 D 的方法。

第一个答案:

C x = new D();

是合法的,因为 D 类型的对象 也是 C (因为 D 扩展了 C)。

第二个答案:

D x = new C();

合法,因为对 D 的引用不能保存其父类(super class)型 C 的对象。

关于Java继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5921205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com