gpt4 book ai didi

java - Java 中的继承,表面类型与实际类型

转载 作者:搜寻专家 更新时间:2023-10-31 19:38:02 24 4
gpt4 key购买 nike

谁能解释一下这次执行的结果?我没注意到为什么调用每个方法。以及我们如何区分真实类型和表面类型。谢谢 :)

public class JavaApplication15 {
public static void main(String[] args) {
A a = new A();
B b= new B();
A ab = new B();
b.f(a);
b.f(b);
b.f(ab);
}
}

public class A {
private final String id="A";
public void f(A x){
System.out.println("Send a fax to "+ x ) ;
}
public String toString(){return id;}
}

public class B extends A{
private final String id="B";
public void f(B x){
System.out.println("Send an email to"+ x ) ;
}
public String toString(){return id;}
}

结果:

Send a fax to A
Send an email to B
Send a fax to B

最佳答案

你是overloading它(根据维基百科)创建了多个具有不同实现的同名方法。我想你是想 override f(A x) 方法与 f(B x) 方法。覆盖(根据维基百科)允许子类或子类提供其父类(super class)或父类之一已提供的方法的特定实现

根据您在问题中表达的惊讶,我认为您想要类似的东西

@Override
public void f(A x) {
System.out.println("Send an email to"+ x ) ;
}

关于java - Java 中的继承,表面类型与实际类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697993/

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