我在理解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();
那么编写这样的代码有什么好处?