我有三节课。
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)学生
答案 0 :(得分:1)
这是因为说Person
或Student
的每个实例也是GradStudent
的实例是不安全的。但GradStudent
或Student
的每个实例也是Person
的实例
您始终可以抽象到层次结构的更高级别,但不能向另一个方向抽象。