java - Java 中的函数覆盖重载

标签 java overloading overriding

覆盖和重载有什么区别?

最佳答案

  • 重载:在编译时根据指定参数的数量和类型选择方法签名

  • 覆盖:根据目标对象的实际类型(与表达式的编译时类型相反)在执行时选择方法实现

    <

例如:

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/

相关文章:

java - 如何管理自定义处理器所需的外部 jar 的依赖关系

java - 调试时无法实例化 Activity 问题

c++ - C++ 中的重载解析

C++ vector 运算符重载

scala - 用对象覆盖方法

java - 重载的精度高于覆盖

java - 代号一侧菜单在永久模式下缺少内容

java - java 6 项目中的 onelogin java saml 2.0

c - 为 msvc 或替代解决方法模拟 __typeof__ 的最佳方法?

java - 使用泛型子类型覆盖继承接口(interface)中的方法