为什么这个java转换会失败

时间:2017-10-07 16:27:54

标签: java casting

我有三节课。

Person <-- Student <-- GradStudent,其中<--表示扩展(即GradStudent扩展学生,学生扩展人员)

Person person = new Student(); // this is perfectly legal

GradStudent gradStudent = (GradStudent) person;
System.out.println(gradStudent); // java.lang.ClassCastException here

为什么呢?我们的 person 变量是学生,我们可以学生s =新GradStudent(),所以为什么这不起作用?

同样如果我

Student student = new Student();
GradStudent aGradStudent = (GradStudent) student;
System.out.println(aGradStudent); // same error here

为什么我们可以学生s =新GradStudent(),但我们不能学生=新学生(),然后 GradStudent aGradeStudent =( GradStudent)学生

1 个答案:

答案 0 :(得分:1)

这是因为说PersonStudent的每个实例也是GradStudent的实例是不安全的。但GradStudentStudent的每个实例也是Person的实例 您始终可以抽象到层次结构的更高级别,但不能向另一个方向抽象。