gpt4 book ai didi

java - Java 中的转换和动态与静态类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:35:13 26 4
gpt4 key购买 nike

我正在学习静态类型与动态类型,我已经基本了解它了,但我仍然无法理解这种情况。

如果 B 类扩展 A,我有:

A x = new B();

是否允许以下​​内容?

B y = x;

或者是否需要显式转换?:

B y = (B) x;

谢谢!

最佳答案

显式转换是必需的,并且会成功

之所以需要它,是因为它总是成功:声明为 A x 的变量可以引用不是 instanceof B 的实例

// Type mismatch: cannot convert from Object to String
Object o = "Ha!";
String s = o; // DOESN'T COMPILE

// Compiles fine, cast succeeds at run-time
Object o = "Ha!";
String s = (String) o;

// Compiles fine, throws ClassCastException at run-time
Object o = Boolean.FALSE;
String s = (String) o;

是否需要强制转换由所涉及变量的声明类型决定,由它们在运行时引用的对象类型决定-时间。即使可以在编译时解析引用也是如此。

final Object o = "Ha!";
String s = o; // STILL doesn't compile!!!

在这里,即使 final 变量 o 总是引用一个 instanceof String,它声明的类型仍然是 Object,因此编译仍然需要显式的(String) 转换。

关于java - Java 中的转换和动态与静态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2672645/

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