覆盖和重载有什么区别?
最佳答案
重载:在编译时根据指定参数的数量和类型选择方法签名
覆盖:根据目标对象的实际类型(与表达式的编译时类型相反)在执行时选择方法实现
<
例如:
class Base
{
void foo(int x)
{
System.out.println("Base.foo(int)");
}
void foo(double d)
{
System.out.println("Base.foo(double)");
}
}
class Child extends Base
{
@Override void foo (int x)
{
System.out.println("Child.foo(int)");
}
}
...
Base b = new Child();
b.foo(10); // Prints Child.foo(int)
b.foo(5.0); // Prints Base.foo(double)
这两个调用都是重载 的例子。有两个方法称为 foo
,由编译器决定调用哪个签名。
第一个调用是覆盖 的示例。编译器选择签名“foo(int)”,但在执行时,目标对象的类型决定了要使用的实现应该是 Child
中的实现。
关于java - Java 中的函数覆盖重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047793/