私有实例方法在运行时不受限制吗?

时间:2015-07-06 19:03:09

标签: java dynamic private override

请查看以下代码。

Point startBlue, endBlue;

当我编译这段代码时,它编译得很好。 当我运行TestClass时,输出为:TestClass方法        裁判。变量obj是TestClass类型,但它引用了一个Sub类的对象,因此在运行时它应该与Sub的privMethod()绑定。 你能解释一下吗?

2 个答案:

答案 0 :(得分:4)

子类中的方法不会覆盖

private个方法。只能覆盖publicprotectedpackage-private个。因此,不会应用运行时的多态行为。

如果将注释@Override添加到子类中的声明方法,则会出现编译错误:

@Override  // error
private void privMethod()
{
    System.out.println("SubClass Method");
}

答案 1 :(得分:0)

私有修饰符 - 只能在自己的类中访问字段/方法。

enter image description here

有关access specifier的更多信息。

虽然SubClass扩展TestClass但是TestClass privMethod()根本不可见到SubClass。因此,当您在SubClass中实现privMethod()方法时,它不会覆盖TestClass的方法。

为了确保覆盖超类的方法,可以使用@Override Java注释。如果方法与超类中的方法不匹配,编译器将给出以下错误

  

SubClass类型的privMethod()方法必须覆盖或实现超类型方法