gpt4 book ai didi

java - 以我们转换原始数据类型的方式转换对象

转载 作者:搜寻专家 更新时间:2023-11-01 03:32:55 25 4
gpt4 key购买 nike

我有三个类:AAA 和 Top。 A 和 AA 扩展了 Top。

为什么这不会编译:

A a = new A();
AA aa = (AA)a;

但这将:

float f = 4.3f;
int i = (int) f;

最佳答案

A 类和 AA 类在同一层次结构中,但它们是并排的,因此它们不能相互转换。

假设类 A 是这样定义的:

public class A extends Top{

public A() {

}

public void foo(int i) {
System.out.println(i);
}

}

AA 类定义如下:

public class AA extends Top {

public AA() {

}

public void bar(String s) {

}

}

现在让从理论上想象一下如果您尝试将 A 转换为 AA 并且它起作用了,实际会发生什么:

A a = new A();
(AA) aa = (AA) a;

因为 aa 有一个 static 类型 AA,Java 允许你这样写代码:

aa.bar("hi!");

因为 AA 类有一个 bar 方法,但是 aa 有一个 dynamic type A,它意味着变量 aa 引用的实际对象 有一个名为 bar("hi!") 的方法。

(对象的静态类型告诉您可以调用哪些方法,动态类型告诉您它实际有哪些方法。)

所以 Java 会告诉 aabar("hi!")aa 不知道该做什么,因为 aa 没有定义 bar 方法。

关于java - 以我们转换原始数据类型的方式转换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433626/

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