Java:Ref或new()的类型决定哪些方法可见

时间:2014-09-11 01:17:22

标签: java

Person是基类。 Doctor类扩展了Person

现在假设diagnose()是属于Doctor类的方法。

Person p = New Person();
Doctor q = (Doctor)p;
q.diagnose();

为什么会抛出错误?

q是种类Doctor的对象引用。类的所有对象共享相同的方法副本,因此diagnose()应该可以使用q

p中没有Doctor可用的方法字段。 为什么java不允许这样做?

2 个答案:

答案 0 :(得分:3)

  

为什么会抛出错误?

因为您要将Person类型的对象转换为Doctorp的值是Person实例的引用,而不是Doctor的实例,因此转换失败。

如果你有:

Person p = new Doctor();
Doctor d = (Doctor) p;
d.diagnose();

然后就可以了。

d.diagnose()是类型的变量时,这不是什么可见 - d 可见 Doctor,就像在这里一样。 diagnose()电话之前行中的执行时间转换问题。

答案 1 :(得分:0)

因为医生是一个人,通过继承,但一个人不是医生。