【发布时间】:2014-12-28 16:02:36
【问题描述】:
给定以下代码:
超类:
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 的 main 方法时,我希望得到某种异常,但实际上运行的是 SuperClass 中的代码,而不是 SubClass 中的代码,因此正在运行子类实例上的超类类型的实例方法。
为什么会这样? 编辑:这不违反封装吗?
附:当更改为受保护而不是私有修饰符时,多态性开始发挥作用,我们又回到了我称之为“预期行为”的东西
【问题讨论】:
-
这是因为私有方法在范围内,因为您在同一个文件中。如果您在第三个文件中创建
main,您的代码将无法编译。 -
在SubClass'
method上打个@Override注解就明白了。
标签: java oop inheritance static