【问题标题】:Function overloading vs function overriding across inherited classes in javajava中跨继承类的函数重载与函数覆盖
【发布时间】:2017-12-21 08:30:55
【问题描述】:

考虑下面这段代码

public class SuperClass
{
    //label 1
    void function(int a)
    {
        System.out.println(a);
    }
}

public class SubClass extends SuperClass
{
    //label 2
    void function(int a)
    {
        a++;
        System.out.println(a);
    }

    //label 3
    void function(float a)
    {
        System.out.println(a);
    }   
}

据我所知,标签 2 是函数覆盖的一个示例,因为在子类中重写了超类方法并使用自己的实现,而 标签 3 是函数重载的形式,因为参数不同而函数名相同。

我的问题是,如果标签 3 实际上是函数重载,它重载了哪个函数?标签 1 还是标签 2

我的理论是标签 3 重载了标签 2,因为它们属于同一类。

我遇到过这些链接 -

Does overloading work with Inheritance?

Different ways of Method Overloading in Java

虽然他们提供了有用的信息,但他们并没有真正回答我的问题。

这只是我在学习 Java 中的多态性时遇到的一个概念性问题。任何帮助将不胜感激。

【问题讨论】:

    标签: java inheritance polymorphism overloading overriding


    【解决方案1】:

    我的问题是如果标签 3 实际上是函数重载,它是哪个函数重载?标签 1 还是标签 2?

    标签 2,因为重载仅出现在 SubClass 内。 SuperClass 中没有过载。 (尽管您可能会争辩说,由于标签 2 覆盖标签 1,答案是“两者”,但在实际发生过载的任何情况下,您都必须进行覆盖 - 例如,您必须处理带有SubClass 参考——所以实际上它只是标签 2。)

    【讨论】:

    • Although you could argue that since label 2 overrides label 1, the answer is sort of "both"。这是我最初的想法,但我意识到函数重载仅适用于同一类的上下文。感谢您消除我的疑问。
    【解决方案2】:

    重载发生在类中,因此,您的假设是正确的。

    标签 2 和标签 3 重载

    【讨论】:

    • 感谢您确认我的假设。但我必须提供另一个答案作为“已接受的答案”,因为它涉及到更多细节。
    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多