gpt4 book ai didi

java - 强制转换异常错误

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

我决定从 Android 应用程序模拟此示例代码:

TextView txt = (TextView) findViewById(R.id.activity_display_message);

findViewById 返回 View 对象,然后我们将其转换为 TextView 对象(TextView查看)

看来我误解了它的工作原理。我期望这段代码能够工作,因为 C 扩展了 B,因此我应该将 B 对象向下转换为 C

但我在运行时遇到异常,无法将 B 转换为 C

谁能解释一下我哪里错了?为什么 Android 示例有效?

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

class B{
public void f(){
System.out.println("Class B");
}
}

class C extends B{
public void f(){
System.out.println("Class C");
}
}

最佳答案

强制转换操作允许您更改对象的静态类型,这是“告诉编译器您所了解的有关被强制转换的对象类型的信息”的另一种方式。

如果您有一个 B 类型的变量,其中包含一个 C 类型的对象,则可以将该变量强制转换为 C:

B b = new C();
C c = (C)b; // works fine

这是允许的,因为 b 的对象实际上是 C

b引用的对象不是一个C时,编译器会捕获你的错误,并抛出一个强制转换异常:

B b = new B();
C c = (C)b; // throws class cast exception

成功与不成功的区别取决于运行时对象的实际类型。有效的代码设法将 View 转换为 TextView,因为静态类型为 View 的变量实际上引用了 TextView 在运行时。

关于java - 强制转换异常错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39659206/

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