gpt4 book ai didi

Java SDK10 : Is cast explicitly required?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:52:43 25 4
gpt4 key购买 nike

我正在阅读一本基于 JDK 8 的 Java 书籍。在有关继承和泛化的章节中,显示了以下示例:

class A {}
class B extends A {}
class C1 extends B { public void x1() {System.out.println("C1.x1");} }
class C2 extends B { public void x2() {System.out.println("C2.x2");} }

然后,声明了一些对象变量,类型都是A:

A obj1, obj2, obj3, obj4;

这些变量由四个类的实例填充:

obj1 = new A();
obj2 = new B();
obj3 = new C1();
obj4 = new C2();

现在,obj3.x1() 不起作用,因为 obj3A 类型,而 x1() 未在 A 中定义。在书中,现在可以声明一个类型为 C1 的新变量 obj5 并将 obj3 的值赋给它:

C1 obj5 = obj3; // then obj5.x1() should work

但是在这一行我得到一个Incompatible Types编译错误。

SDK8 和 10 有区别吗?还是我在某处遗漏了一些错误?

附带说明:C1 obj5 = (C1) obj3 中的转换是可行的。

最佳答案

通过转换,您告诉编译器您认为赋值是正确的,因为您认为 obj3C1 类型。然后编译器相信你并继续。

如果你对此撒谎,你会得到一个运行时异常。如果没有,一切都很好。

关于Java SDK10 : Is cast explicitly required?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53514983/

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