gpt4 book ai didi

java - 为什么在这种情况下调用父类方法而不是子类方法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:11:48 24 4
gpt4 key购买 nike

我有一个父类 A 和它的子类 B。两者都有 doSomething 方法,参数类型不同。

A级

package Inheritance;

public class A {

public void doSomething(Object str){
System.out.println("Base impl:"+str);
}
}

B级

package Inheritance;

public class B extends A{

public void doSomething(String str){
System.out.println("Child impl:"+str);
}

public static void main(String[] args) {

A a = new B();
a.doSomething("override");

}
}

当我运行它时,我得到“Base impl:override”作为输出!

a 指向的是B的一个对象,他传递的参数是String,所以它不应该调用 BdoSomething(String str) 方法?

最佳答案

当您使用类型 A 的引用时,您只会看到为类 A 定义的方法。由于 B 中的 doSomething 不会覆盖 A 中的 doSomething(因为它有不同的签名),它不会被调用。

如果您要使用类型 B 的引用,则两种方法都可用,并且将选择 B 的 doSomething,因为它有更具体的参数(字符串与对象)。

关于java - 为什么在这种情况下调用父类方法而不是子类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26903661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com