我们有一个父类和子类,该类的方法具有相同的名称,但参数作为基元和 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));
}
}
3条答案
按热度按时间xpcnnkqh1#
方法已重载。
运行这个程序将调用父方法-它将被重写而不是重载
对。你在打电话吗
takeValue
在Parent
变量,这意味着编译器将在Parent
班级。重载在这里甚至不可见(签名是基于静态类型匹配的,即java根据调用方法的变量的声明数据类型来查找方法,而不是根据分配给变量的对象的数据类型来查找方法,这将是运行时的事情)。因为
public void takeValue(Integer a)
编译器在检查方法调用时不考虑,p.takeValue(new Integer(51));
链接到Parent.takeValue(int)
通过自动装箱(如果两种方法都是可见的,或者在Parent
类)。smdnsysy2#
在
Java
Overriding
以及Overloading
是非常重要的概念。为了充分理解这些差异,我强烈建议您阅读以下内容:java中的重写与重载
16 java重载与重写。面向对象java教程。
cu6pst1q3#
这是超载。名称相同,但输入参数的类型不同。
为了确认这一点,当您尝试附加
@Override
注解。Integer
以及int
是不同的类型。