gpt4 book ai didi

java - 覆盖方法(早期加入)并放入 "null"

转载 作者:行者123 更新时间:2023-12-01 17:15:47 25 4
gpt4 key购买 nike

大家早上好。我以为我知道覆盖和重载是什么意思,并试图向我的 friend 解释。一切都很好,但是当我回到家时,我决定写这个例子。

    public class Car{

public void say(){
System.out.println("Dodge");
}

public static void main(String[] args){
Car c = new Dodge();
new Car().print(c);
}
public void print(Car t){
System.out.println("Car");
}
public void print(Dodge b){
System.out.println("Dodge");
}
}

class Dodge extends Car{
public void say(){
System.out.println("Dodge");
}
}

很明显,如果我们运行这段代码:“Car”将是输出。因为编译器会找到采用格式对象 Car 的方法。但是如果我们像这样改变 main 方法会怎么样:

public static void main(String[] args){
new Car().print(null);
}

输出将是:“Dodge”,我不明白为什么? smb可以解释一下吗?

附注我尝试也写了这段代码:

public class Car{

public void say(){
System.out.println("Dodge");
}

public static void main(String[] args){
new Car().print(null);
}
public void print(BigInteger t){
System.out.println("Car");
}
public void print(Double b){
System.out.println("Dodge");
}

}想法告诉我:不明确的方法调用。两者都在 Car 中打印 (BigInteger) 和在汽车比赛中打印(双)这个消息是显而易见的。等级制度对此有影响吗?为什么?请告诉我我缺少什么。

最佳答案

在决定调用哪个方法时,Java 总是尝试寻找最具体的匹配。请参阅JLS Section 15.12.2 ,特别是部分

If no method applicable by subtyping is found, the search for applicable methods continues with phase 2 (§15.12.2.3).
Otherwise, the most specific method (§15.12.2.5) is chosen among the methods that are applicable by subtyping.

在第一个带有参数 null 的示例中,Dodge 是最具体的参数匹配,因为它继承自 Car,因此没有问题。
然而,在最后一个示例中,没有明显的赢家,因为候选者 DoubleBigInteger 都没有从另一个继承。因此,您会得到歧义错误。

关于java - 覆盖方法(早期加入)并放入 "null",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22236125/

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