gpt4 book ai didi

Java 继承和转换

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:42 26 4
gpt4 key购买 nike

所以我在研究一些 OCAJP JAVA 示例问题时,我偶然发现了以下问题。

考虑以下代码。

interface I{ } 
class A implements I{ }
class B extends A { }
class C extends B{ }

以及以下声明:

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

哪个会编译运行不报错?

A. a = (B)(I)b;
B. b = (B)(I) a;
C. a = (I) b;
D. I i = (C) a;

问题的答案是 A。这是有道理的。但我不明白的是 B. 不是正确答案。它说这是不正确的选择,因为“这将在运行时失败,因为 a 不指向类 B 的对象。”

现在,我实际上去了 Eclipse 并写下了整个代码。 C 显然没有编译,D. 在运行时失败。 B. 至少我的代码编译没有问题。我在这里错过了什么吗?还是这本书真的错了?我实际放入 Eclipse 的代码是这样的:

public class Test{
public static void main (String[]args){
A a = new A();
B b = new B();

a=(B)(I)b;
b=(B)(I)a;
}
}

interface I{ }
class A implements I{ }
class B extends A { }
class C extends B{ }

最佳答案

这里的问题是顺序语句。

a=(B)(I)b;

b=(B)(I)a;

您已经在第一条语句中将 b 分配给了 a。如果您独立(不按顺序)执行这两个语句,您将看到解释的行为。

关于Java 继承和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404007/

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