“覆蓋私有方法”是有問題的:
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方法,最好採用不同的名字。