gpt4 book ai didi

java - 与抽象类的继承混淆。方法会互相覆盖吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:22 25 4
gpt4 key购买 nike

我有三个类,一个测试类,一个形状类和一个几何对象类。形状类扩展了 geometricObject 类(geometricObject 类是抽象类)。问题是,shape 类和 geometricObject 具有相同的 toString 方法,但两者的内容不同。当我在测试类中调用 toString 方法时,我从形状类中的 toString 方法中获取结果。当我尝试将我创建的对象转换为 geometricObject 类并尝试调用那里的 toString 方法时,我仍然从形状类的 toString 方法中得到相同的结果。那么,如果抽象/子类具有相同的名称/参数列表,父类(super class)是否会覆盖它们中的方法?

最佳答案

您在这里看到的行为是由于多态性和函数重载造成的。如果在基类和派生类中都有 toString() 方法,它将始终调用派生类中的 toString() 方法的最派生版本。您如何保存对派生类的引用并不重要(例如,在派生类引用、基类引用或对象引用中)。

无论基类实现了 toString() 方法,还是仅仅声明了它,都是如此。对于所有其他方法也是如此 - toString() 除了它是 Object 的基本契约的一部分之外并不特别。

因此,即使您将派生类转换为 Object 并在其上调用 toString(),您也会在这里看到相同的行为。


PS:您应该在 Java 中使用 @Override 来注释您的覆盖方法,例如 toString() 以使其更明确地可识别 - 许多工具/IDE 都致力于此概念。

关于java - 与抽象类的继承混淆。方法会互相覆盖吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22818613/

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