方法重载和覆盖有什么区别?

时间:2012-09-11 16:51:34

标签: java overloading override

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

2 个答案:

答案 0 :(得分:129)

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

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

方法覆盖意味着有两个方法具有相同的参数,但实现方式不同。其中一个将存在于父类中,而另一个将存在于派生类或子类中。 @Override注释虽然不是必需的,但在编译时对enforce proper overriding of a method有帮助。

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

class Child extends Parent {

    @Override
    void foo(double d){
        // this method is overridden.  
    }
}

答案 1 :(得分:35)

方法覆盖是指子类重新定义与父类相同的方法,具有相同的参数。 例如,标准Java类java.util.LinkedHashSet扩展java.util.HashSet。方法add()LinkedHashSet中被覆盖。如果您的变量类型为HashSet,并且您调用其add()方法,则会调用add()的相应实现,具体取决于它是HashSetLinkedHashSet。这称为多态性。

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