我正在编写一本基于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");} }
Run Code Online (Sandbox Code Playgroud)
然后,声明一些对象变量,所有类型A:
A obj1, obj2, obj3, obj4;
Run Code Online (Sandbox Code Playgroud)
这些变量用四个类的实例填充:
obj1 = new A();
obj2 = new B();
obj3 = new C1();
obj4 = new C2();
Run Code Online (Sandbox Code Playgroud)
现在,obj3.x1()因为obj3属于类型A而x1()无效,并且未定义A.在本书中,现在可以声明一个新obj5的类型变量C1并为其赋值obj3:
C1 obj5 = obj3; // then obj5.x1() should work
Run Code Online (Sandbox Code Playgroud)
但是在这一行上我得到了一个Incompatible Types编译错误.
SDK8和10之间有什么不同吗?或者我在某个地方错过了一些错误?
作为旁注:铸造如在C1 obj5 = (C1) obj3工作中.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |