函数重载与函数覆盖java

时间:2017-12-21 08:30:55

标签: java inheritance polymorphism overloading function-overriding

考虑以下代码

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中的多态性时遇到的一个概念性问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

  

我的问题是标签3是否实际上是函数重载,哪个函数是重载?标签1或标签2?

标签2,因为重载仅出现在SubClass内。 SuperClass中没有重载。 (虽然你可以争辩说,因为标签2覆盖了标签1,答案就是“两者”,但在任何实际发生过载的情况下,你必须有覆盖 - 例如,你必须要处理使用SubClass引用 - 所以它实际上只是标签2.)

答案 1 :(得分:1)

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

  

标签2和标签3重载