gpt4 book ai didi

java - 类层次结构和对象之间的转换

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:32 26 4
gpt4 key购买 nike

据我所知不可能将父类(super class)的对象转换为子类的对象。这会编译,但在运行时会返回错误。

更具体地说,给定以下类和接口(interface)的层次结构:

. Alpha 是 Beta 和 Gamma 的父类(super class)
. Gamma 是 Delta 和 Omega 的父类(super class)
.接口(interface)“In”由 Beta 和 Delta 实现

在这种情况下,我定义了以下代码:

Delta r;
Gamma q;

这是正确的吗?

r = (Delta) q;

即使 Delta 是 Gamma 的子类,我也可以将 q 转换为 Delta 类型吗?我认为这是不可能的,我的教科书另有说明。我已经搜索了很多并且根据 this我是对的,这是教科书上的错误。

我错过了什么吗?

最佳答案

这是合法的:

Gamma q = new Delta();
Delta d = (Delta)q;

这将编译但会给你一个运行时错误:

Gamma q = new Gamma();
Delta d = (Delta)q;

在第一种情况下,q 是一个Delta,因此您可以将它转换为一个Delta。在第二种情况下,q 是一个 Gamma,因此您不能将它转换为 Delta。

Gamma 变量 可以引用 Gamma 对象 或作为 Gamma,例如一个 Delta 对象;当您将 Gamma 转换为 Delta 时,您就是在告诉编译器 Gamma 变量指的是 Delta对象或作为 Delta 子类的对象(如果你错了,你会得到一个 ClassCastException)。对象本身的类型是不可变的 - 您不能在运行时将 Gamma 对象的类型更改为 Delta 对象,因此如果 Gamma变量实际上指的是 Gamma 对象,但您随后尝试将其转换为 Delta 对象,然后您将获得运行时异常。

关于java - 类层次结构和对象之间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17506587/

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