gpt4 book ai didi

java - java如何确定对象的实际类型?

转载 作者:行者123 更新时间:2023-12-01 09:27:52 25 4
gpt4 key购买 nike

当我学习 Java 中的多态概念时,出现了这个问题。如下代码所示:

public class test {
public static void main(String[] args){
testF(new B());
}
public static void testF(A a){
a.f();
}
}
class A{
public void f(){System.out.println("method in super class");}
}
class B extends A{
public void f(){System.out.println("mehtod in sub class");}
}

testF方法需要一个A类参数,但我们传递了一个B类引用,它是A类的子类。编译器很乐意接受它,并且由于多态性机制,当我们在引用“a”上调用方法 f() 时,将获得在“实际类型”中声明的方法。我的问题是,当我们将新的构建对象 B 传递给 testF() 时,它已被向上转换为类 A,那么 java 如何才能获取其实际类型呢?

最佳答案

Java 为每个对象保留一个虚拟方法表(也称为调度表),以便在运行时调用时知道实际调用哪个 f

它还跟踪有关对象的相关元信息,例如它们是哪个类的实例......等等。

请注意,这实际上并不像您所想的那样向上转换。运行时执行最少量的安全/类型检查,但除此之外,它使用虚拟方法表来查找调用时要运行的方法。

关于java - java如何确定对象的实际类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693889/

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