gpt4 book ai didi

java - Java 中的转换(接口(interface)和类)

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:48 26 4
gpt4 key购买 nike

如果:

interface I{}

class A implements I{}

class B extends A{}

class C extends B{}

A a = new A();
B b = new B();

Why a = (B)(I)b; is correct
but b = (B)(I)a; is false?

我发现转换非常令人困惑,了解我是否可以向下转换或向上转换对象的最佳方法是什么?

最佳答案

您的类层次结构如下所示:

C -> B -> A -> I

对象 x 可以转换为类 Y,如果 x 的运行时类型是 Y 的子类。或者,换句话说,如果存在从 x 的运行时类型到 Y 的路径。 “运行时类型”是指对象类型(构造对象时使用的类型),而不是变量类型(来自变量声明的类型)。

这是有效的:

b = new B();
(B)(I)b;

b 中存储的对象具有类型B。它被强制转换为 I,然后返回到 BB 是它们的子类。 Cast to I 实际上并没有做任何事情,只是为了让你感到困惑。

但是,这些都不是有效的:

a = new A();
(B)(I)a;
(B)a;

它们都将失败并出现异常:java.lang.ClassCastException: A cannot be cast to Ba 的类型 A 不是 B 的子类。 AB 之间存在关系,但方向相反 - BA 的子类.

有关更详细的说明,请参见此处:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

关于java - Java 中的转换(接口(interface)和类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27759663/

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