java方法重载还是重写?

njthzxwz  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(456)

我们有一个父类和子类,该类的方法具有相同的名称,但参数作为基元和 Package 器。有人能解释一下这是否会被称为方法重写和方法重载的原因吗。运行这个程序将调用父方法-父方法将被重写而不是重载,寻找解释。

class Parent {
    public void takeValue(int a) {
        System.out.println("take value method from parent is invoked");
    }
}

class Child extends Parent {
    public void takeValue(Integer a) {
        System.out.println("take value method from child is invoked");

    }

    public static void main(String[] args) {
        Parent p = new Child();
        p.takeValue(new Integer(51));
    }
}
xpcnnkqh

xpcnnkqh1#

方法已重载。
运行这个程序将调用父方法-它将被重写而不是重载
对。你在打电话吗 takeValueParent 变量,这意味着编译器将在 Parent 班级。重载在这里甚至不可见(签名是基于静态类型匹配的,即java根据调用方法的变量的声明数据类型来查找方法,而不是根据分配给变量的对象的数据类型来查找方法,这将是运行时的事情)。
因为 public void takeValue(Integer a) 编译器在检查方法调用时不考虑, p.takeValue(new Integer(51)); 链接到 Parent.takeValue(int) 通过自动装箱(如果两种方法都是可见的,或者在 Parent 类)。

smdnsysy

smdnsysy2#


Java Overriding 以及 Overloading 是非常重要的概念。为了充分理解这些差异,我强烈建议您阅读以下内容:
java中的重写与重载
16 java重载与重写。面向对象java教程。

cu6pst1q

cu6pst1q3#

这是超载。名称相同,但输入参数的类型不同。
为了确认这一点,当您尝试附加 @Override 注解。 Integer 以及 int 是不同的类型。

相关问题