【发布时间】:2013-05-13 02:36:32
【问题描述】:
我听说所有 Java 函数都是隐式虚拟的,但我仍然不确定这是否会按照我的意愿运行。
假设我有一个班级 A,有孩子 B。 A 和 B 都有名为 foo() 的函数,所以 B 的定义覆盖了 A。
还假设 A 有一个调用的函数,该函数将 A 的实例作为参数:
如果我将 B 的实例传递给函数,它将调用 foo() 的哪个定义,A 还是 B?
【问题讨论】:
-
我认为私有函数不是虚拟的,你可以有两个
private foo()方法,每个类都会调用自己的 -
@hoaz 它们确实是虚拟的,但不能被覆盖。顺便说一句,在子类中,您不会重写
private方法,而只需 隐藏 它。这被称为隐藏。更多信息:docs.oracle.com/javase/tutorial/java/IandI/override.html -
你不觉得你自相矛盾吗? :) 如果是虚拟的,它有什么虚拟属性?
-
说同样的话,私有方法是最终的,因此是非虚拟的
-
@OldCurmudgeon 也不是任何其他访问级别——答案取决于访问级别。