子类不能重写父类的private方法,因为private方法仅在本类内部可见,子类无法继承或访问,因此在子类中定义同名方法只是新增方法而非重写,不具有多态性,也无法通过父类引用调用,尽管编译通过,但实际属于方法隐藏而非覆盖。
子类不能重写父类的private方法。
原因如下:
private方法的访问权限仅限于其所在类的内部,子类无法继承或访问父类的private方法。既然子类看不到这个方法,也就无法进行重写(override)。
class Parent {
private void show() {
System.out.println("Parent's private show");
}
}
class Child extends Parent {
public void show() { // 这不是重写,而是新方法
System.out.println("Child's show");
}
}
public class Test {
public static void main(String[] args) {
Child c = new Child();
c.show(); // 输出: Child's show
Parent p = new Child();
// p.show(); // 编译错误!Parent 的 show 是 private,不可见
}
}
从上面例子可以看出,Child 类中的 show() 方法并没有真正覆盖父类的方法,只是恰好名字一样而已。
基本上就这些——private 方法封装性强,但也意味着它对子类完全不可见,自然谈不上重写。