public class A {
public static void main(String[] args){
A a = new A();
B b = (B)a;
//执行该语句会抛ClassCastException异常。
B b2 = new B();
a = (A)b2;
System.out.println("success");
}
}
class B extends A{
}
子类由于比父类拥有了更多的特性,所以当你想将父类强制转化为其一个子类的时候,编译没有错误,但在运行时就会抛异常。反之,则可以。 这就是所谓的向上转型,多态。
21、Java中父类和子类强转的问题
下面的程序
1. public class GC {
2. private Object o;
3. private void doSomethingElse(Object obj) { o = obj; }
4. public void doSomething() {
5. Object o = new Object();
6. doSomethingElse(o);
7. o = new Object();
8. doSomethingElse(null);
9. o = null;
10. }
11. }
请问,当调用doSomething的时候。执行到第几行,第5行生成的实例o就又成为了垃圾回收的可能对象。
A. Line 5
B. Line 6
C. Line 7
D. Line 8
E. Line 9
F. Line 10
答案:D。为什么不是C呢?因为第七行的o指的是局部变量o,不是成员变量o。