什么是方法重载和方法覆盖之间的区别?能否用例子来解释一下?
方法重载指的是在同一个类中有两个或更多方法拥有相同的名称但参数不同。
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.
}
}
方法重写指的是一个子类重新定义了一个与父类相同参数的方法。例如,标准的Java类java.util.LinkedHashSet
继承自java.util.HashSet
,并在其中重写了add()
方法。如果您有一个类型为HashSet
的变量,并调用它的add()
方法,它将根据是HashSet
还是LinkedHashSet
选择适当的实现来调用add()
方法。这被称为多态。
方法重载是在同一个类中定义多个方法,接受不同数量和类型的参数。在这种情况下,实际调用的方法是在编译时根据参数的数量和类型来确定的。例如,方法System.out.println()
是被重载的,因此您可以传递整数和字符串,它将调用不同版本的方法。
@Override
不是必需的。这是一个好的惯例,但不是强制性要求。 - GriffeyDog