为什么java转换失败

为什么java转换失败,java,casting,Java,Casting,我有三节课 Person这是因为说Person或Student的每个实例也是GradStudent的实例是不安全的。但是研究生或学生的每个实例也是人的一个实例 您总是可以抽象到层次结构的更高级别,但不是在另一个方向。在Java中总是允许向上转换的,而且它是隐式的,也因为它是一个子类,不同于尊重替换原则的子类型。我不明白的是,转换与仅仅声明Student=new gradstuent()有什么不同?因为这是一个包含静态类型Student和动态类型GradStudent的声明,而动态类型GradSt

我有三节课


Person这是因为说
Person
Student
的每个实例也是
GradStudent
的实例是不安全的。但是
研究生
学生
的每个实例也是
的一个实例

您总是可以抽象到层次结构的更高级别,但不是在另一个方向。

在Java中总是允许向上转换的,而且它是隐式的,也因为它是一个子类,不同于尊重替换原则的子类型。我不明白的是,转换与仅仅声明
Student=new gradstuent()有什么不同
?因为这是一个包含静态类型Student和动态类型GradStudent的声明,而动态类型GradStudent是向上转换的。有关更多详细信息,请参阅Java中的动态调度。在本文中,它不是:您可以执行
Student-Student=new-gradstuent()并且可以投射
学生=(学生)研究生。但后者没有意义,因为你不需要那个演员。每个
研究生
都是
学生
。没什么可投的。
GradStudent gradStudent = (GradStudent) person;
System.out.println(gradStudent); // java.lang.ClassCastException here
Student student = new Student();
GradStudent aGradStudent = (GradStudent) student;
System.out.println(aGradStudent); // same error here