【发布时间】:2016-10-17 10:48:07
【问题描述】:
public class A
{
public void printA(){
System.out.println("A");
}
}
public class B extends A
{
public void printB(){
System.out.println("B");
}
}
public class C extends B
{
public void printC(){
System.out.println("C");
}
}
public class test {
public static void main(String[] args)
{
A a = new B();
a.printA(); // work
B b = (B) a;
b.printB(); // work
C c = (C) b;
c.printC(); // not work throw java.lang.ClassCastException
}
}
我有三个班级 A 和 B 和 C
C 从 B 延伸,B 从 A 延伸
为什么向下转换从 A 到 B 工作,而不是从 B 到 C 工作,尽管它们之间的关系像 A 和 B ,B 是 C 的父级,那么它如何工作 JVM??
【问题讨论】:
-
不能改变对象的类,只能改变引用的类。
-
我不明白我在哪里尝试更改代码中的对象类??
-
当您执行
(C) b时,您试图假装这会将对象的类型更改为C,但事实并非如此。对象的类型始终是B。 -
但是 B 是 C 的父级,这是真的吗?所以 C 是 instanceof B,我可以进行强制转换吗!
-
这已经在互联网上的许多地方进行了解释。在 stackoverflowers 的所有方面,我怀疑将在此线程中编写的任何内容都会比已经存在的内容更清晰。请进行研究并研究资源。
标签: java inheritance casting multiple-inheritance downcast