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

Java:Ref或new()的类型决定哪些方法是可见的,java,Java,说人是基层。 博士班扩展人 现在假设diagnose是属于Doctor类的方法 为什么会抛出错误 q是一种医生的对象参照。类的所有对象共享相同的方法副本,所以diagnose应该对q可用 没有可供p使用的方法字段,也没有在医生中不可用的方法字段。 为什么java不允许这样做?因为医生是一个人,通过继承,但一个人不是一个医生 为什么会抛出错误 因为你在把一个Person类型的对象投射给Doctor。p的值是对Person实例的引用,而不是对Doctor实例的引用,因此强制转换失败 如果你有: Pe

说人是基层。 博士班扩展人

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

为什么会抛出错误

q是一种医生的对象参照。类的所有对象共享相同的方法副本,所以diagnose应该对q可用

没有可供p使用的方法字段,也没有在医生中不可用的方法字段。
为什么java不允许这样做?

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

为什么会抛出错误

因为你在把一个Person类型的对象投射给Doctor。p的值是对Person实例的引用,而不是对Doctor实例的引用,因此强制转换失败

如果你有:

Person p = new Doctor();
Doctor d = (Doctor) p;
d.diagnose();
那就好了


这与什么是可见的无关——只要d是Doctor类型的变量,d.diagnose就是可见的,就像这里一样。在诊断调用之前,这是一个执行时间的问题。

我知道这只是一个输入错误,但您应该修复代码中的问题。例如,你说diagnose是一种方法,但它写得不像一种方法。你的标题令人费解。
Person p = new Doctor();
Doctor d = (Doctor) p;
d.diagnose();