1. 程式人生 > >java方法覆寫(Override) 覆寫與過載的區別(面試)

java方法覆寫(Override) 覆寫與過載的區別(面試)

什麼叫做方法的覆寫?在上篇我描述了繼承的相關知識,就是為講述方法的覆寫做鋪墊的,方法的覆寫就在繼承關係中會產生的。

如果子類定義了與父類相同的方法或屬性的時候,這樣的操作就稱為覆寫(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(); } }

輸出結果如下:
在這裡插入圖片描述
那麼我們在覆寫的時候要注意以下幾點:

  1. 你當前使用的物件是通過哪個類new的。
  2. 當呼叫某個方法,如果該方法已經被子類所覆寫了,那麼呼叫的一定是被覆寫過的方法。

剛剛上面說了覆寫不能擁有比父類更嚴格的訪問權,那麼在這裡先簡單說一下訪問權的級別,後面會詳細解釋: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(); } }

結果:
在這裡插入圖片描述

在之前的部落格中我有講到方法的過載,那麼在這裡整理一下方法過載和方法覆寫的區別:
在這裡插入圖片描述