说Person
是基类。
Doctor
类扩展了Person
。
现在假设diagnose()
是属于Doctor
类的方法。
Person p = New Person();
Doctor q = (Doctor)p;
q.diagnose();
为什么会抛出错误?
q
是种类Doctor
的对象引用。类的所有对象共享相同的方法副本,因此diagnose()
应该可以使用q
。
p
中没有Doctor
可用的方法字段。
为什么java不允许这样做?
答案 0 :(得分:3)
为什么会抛出错误?
因为您要将Person
类型的对象转换为Doctor
。 p
的值是Person
实例的引用,而不是Doctor
的实例,因此转换失败。
如果你有:
Person p = new Doctor();
Doctor d = (Doctor) p;
d.diagnose();
然后就可以了。
当d.diagnose()
是类型的变量时,这不是什么可见 - d
可见 Doctor
,就像在这里一样。 diagnose()
电话之前行中的执行时间转换问题。
答案 1 :(得分:0)
因为医生是一个人,通过继承,但一个人不是医生。