java中的父对象类型转换

时间:2014-08-06 06:33:07

标签: java oop

我在理解java中的转换概念时有点困惑。这是我写的一段代码。

class Parent {
    public int a = 5;
    public void print()
    {
        System.out.println("a :: " + a);
    }
}
class Child extends Parent
{
    public int b = 10 ; 
    public void printMe()
    {
        System.out.println("a :: " + a + " b::  " + b);
    }
}

public class Main  {
    public static void main(String[] args) {

        Child b = new Child();
        Parent a = (Parent)b;
        Child b1 = (Child)a;
        b1.printMe(); // This piece of code works fine. There is no exception


        Parent a1 = new Parent();
        Child b2 = (Child) a1;
        b2.printMe(); //This piece of code throws a java.lang.ClassCastException
    }
}

在第一段代码中,我创建了一个子对象并将其类型转换为父对象。当我再次将父对象强制转换为子对象时它工作正常。但是在另一段代码中,我首先创建一个Parent对象,然后将其类型化为child。编译器不显示任何错误。但是当我运行代码时它正在抛出ClassCastException。有人可以解释我为什么会这样?如果第一段代码没有问题意味着第二段也应该正常工作吗?我感到很困惑。还有一个问题是我们何时将子对象分配给父引用?我的意思是,例如,如果我们编写如下代码

Parent p = new Child();

这等于下面的代码吧?

Parent p = new Parent();

那么编写这样的代码有什么好处?

0 个答案:

没有答案