java方法覆寫(Override) 覆寫與過載的區別(面試)
阿新 • • 發佈:2018-12-05
什麼叫做方法的覆寫?在上篇我描述了繼承的相關知識,就是為講述方法的覆寫做鋪墊的,方法的覆寫就在繼承關係中會產生的。
如果子類定義了與父類相同的方法或屬性的時候,這樣的操作就稱為覆寫(override)
方法的覆寫
子類定義了與父類方法名稱、引數型別及個數完全相同的方法。但是被覆寫不能夠擁有比父類更為嚴格的訪問控制權限。
先看一個簡單的例子:
class Person{
public void print(){
System.out.println("1.[Person]類的print方法");
}
}
class Student extends Person{
public void print(){
System.out.println("2.[Student]類的print方法");
}
}
public class Test{
public static void main(String[] args) {
new Student().print();
}
}
輸出結果如下:
那麼我們在覆寫的時候要注意以下幾點:
- 你當前使用的物件是通過哪個類new的。
- 當呼叫某個方法,如果該方法已經被子類所覆寫了,那麼呼叫的一定是被覆寫過的方法。
剛剛上面說了覆寫不能擁有比父類更嚴格的訪問權,那麼在這裡先簡單說一下訪問權的級別,後面會詳細解釋:private<default<public
什麼意思呢?意思就是如果父類的方法訪問許可權是public,那麼子類覆寫的時候只能是public。
那麼問題來了如果父類是private,那麼子類覆寫public可以嗎?下面我們看個例子:
class Person{
public void fun(){
this.print();
}
//如果現在父類方法使用了private定義,那麼就表示該方法只能被父類使用,子類無法使用。換言之,子類根本就不知道父類有這樣的方法。
private void print(){
System.out.println("1.[Person]類的print方法");
}
}
class Student extends Person{
//這個時候該方法只是子類定義的新方法而已,並沒有和父類的方法有任何關係。
public void print(){
System.out.println("2.[Student]類的print方法");
}
}
public class Test{
public static void main(String[] args) {
new Student().fun();
new Student().print();
}
}
結果:
在之前的部落格中我有講到方法的過載,那麼在這裡整理一下方法過載和方法覆寫的區別: