47

重载方法和覆盖方法有什么区别?任何人都可以用一个例子来解释它吗?

4

2 回答 2

137

方法重载处理在同一个类中具有相同名称但不同参数的两个或多个方法的概念。

void foo(int a)
void foo(int a, float b)

方法覆盖意味着有两个具有相同参数但实现不同的方法。其中一个将存在于父类中,而另一个将存在于派生类或子类中。注释虽然不是必需的@Override,但有助于在编译时强制正确覆盖方法。

class Parent {
    void foo(double d) {
        // do something
    }
}

class Child extends Parent {

    @Override
    void foo(double d){
        // this method is overridden.  
    }
}
于 2012-09-11T16:54:04.063 回答
35

方法覆盖是指子类使用相同的参数重新定义与父类相同的方法。例如,标准的 Java 类java.util.LinkedHashSet扩展java.util.HashSet。该方法add()LinkedHashSet. 如果您有一个类型为 的变量HashSet,并且您调用它的add()方法,它将add()根据它是 aHashSet还是 a来调用 的适当实现LinkedHashSet。这称为多态性。

方法重载是在同一个类中定义多个方法,它们接受不同数量和类型的参数。在这种情况下,调用的实际方法是在编译时根据参数的数量和类型决定的。例如,该方法System.out.println()被重载,因此您可以传递整数和字符串,它会调用不同版本的方法。

于 2012-09-11T16:53:35.163 回答