那是重载还是覆盖?

时间:2011-05-06 07:09:16

标签: java

public class overload1 {
    public Object show()
    {
        return "0";

    }

}
class overload2 extends overload1{
    public String show(){
        return "1";
    }
}

8 个答案:

答案 0 :(得分:14)

覆盖。您正在扩展该类,并覆盖超类方法。

重载看起来像这样:

public class overload1 {
    public Object show()
    {
        return "0";
    }
    public Object show(Object arg)  // Same method name, but different arguments.
    {
        return "0";
    }
}

答案 1 :(得分:4)

最简单的测试方法是放置@Override

class overload2 extends overload1{
    @Override
    public String show(){
        return "1";
    }
}

因此它是一个有效的覆盖(考虑Java> 1.5)

答案 2 :(得分:3)

方法重载意味着两个或多个方法具有相同的名称但签名不同(即不同的输入参数类型,不同的返回类型)

方法重写意味着在继承的类中具有相同方法的不同实现。这两种方法具有相同的签名,但实现方式不同。

所以,在你的例子中,overload2类的show()会覆盖overload1类的show()

答案 3 :(得分:2)

你正在做的是压倒一切。重载是指2个方法具有相同名称但参数不同。

希望有所帮助:)

答案 4 :(得分:2)

Method Overloading表示在同一个类中使用不同的参数编写相同的方法名称,overriding表示在超类和子类中编写相同的方法。

在你的例子中,你在超类和子类中编写相同的方法,所以它的方法覆盖。

答案 5 :(得分:1)

这是一个重要原因,您刚刚重新定义了已经在父类overload1中定义的方法show()。重载处理具有相同方法名称的多个方法,在同一个类中,但具有不同的参数。

答案 6 :(得分:0)

它是一种Overriding,因为在重载参数必须改变

答案 7 :(得分:0)

这是一个覆盖。请参阅Tom Jeffery关于过载的答案。

我认为你可能会问的是“你可以通过更改返回类型来重载吗?” 你不能这样做。您需要更改方法签名(参数类型列表)才能重载。您可以在同一个类或子类中执行此操作。

覆盖意味着超类中的方法无法访问。换句话说,通过在.show()的实例上调用overload2,您可以直接到达overload1.show()吗?如果没有,那就是覆盖。