【发布时间】:2012-09-04 15:50:43
【问题描述】:
重载方法和覆盖方法有什么区别?谁能举例说明一下?
【问题讨论】:
标签: java overloading overriding
重载方法和覆盖方法有什么区别?谁能举例说明一下?
【问题讨论】:
标签: java overloading overriding
方法重载处理在同一个类中有两个或多个方法具有相同名称但不同参数的概念。
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.
}
}
【讨论】:
@Override 不是必需的。这是一个很好的做法,但不是必需的。
方法覆盖是指子类使用相同的参数重新定义与父类相同的方法。 例如,标准 Java 类 java.util.LinkedHashSet 扩展了 java.util.HashSet。方法add() 在LinkedHashSet 中被覆盖。如果您有一个HashSet 类型的变量,并且您调用它的add() 方法,它将根据它是HashSet 还是LinkedHashSet 来调用add() 的适当实现。这称为多态性。
方法重载是在同一个类中定义多个方法,它们接受不同数量和类型的参数。在这种情况下,调用的实际方法是在编译时根据参数的数量和类型决定的。 例如,方法System.out.println()被重载了,所以你可以传递整数和字符串,它会调用不同版本的方法。
【讨论】: