“覆盖私有方法”是有问题的:
public class Student extends Person {
void print(){
System.out.println("我是子类的print");
}
public static void main(String[] args){
Student myTest = new Student();
myTest.fun();
}
}
class Person{
public void fun(){
print();
}
private void print(){
System.out.println("我是父类的print");
}
}
输出:
我是父类的print
我们期望的是输出我是子类的print,但是由于private方法被自动认为是final方法,而且对导出类是屏蔽的。因此,在这种情况下,Student中的print()方法就是一个全新的方法。
只有非private方法才可以被覆盖;虽然编译器不会报错,但是也不会按照我们所期望的来执行。在导出类中,对于基类中的private方法,最好采用不同的名字。