考虑下面的代码:超类的私有方法执行的子类参考
父类:
package poc.poc;
public class SuperClass {
private void method() {
System.out.println("SuperClass!");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SuperClass s = new SubClass();
s.method();
}
}
亚纲:
package poc.poc;
public class SubClass extends SuperClass {
public void method() {
System.out.println("Subclass!");
}
}
当我运行的SuperClass
的主要方法,我希望得到某种例外,但实际上是将运行SuperClass
中的代码,而不是中的代码,并因此在子类实例上运行超类类型的实例方法。
为什么会发生这种情况?编辑:这不违反封装吗?
P.S.当更改为受保护的修饰符而不是私有修饰符时,多态性开始启动,我们又回到了我所称的“预期行为”
这是因为私人方法是在范围内,因为你在同一个文件。如果你在第三个文件中创建'main',你的代码将不能编译。 – 2014-11-01 13:37:32
在SubClass的''method'上放置一个@ @ Override'注解,你就会明白。 – Daniel 2014-11-01 14:00:19