Java 覆寫(Override)詳解__java

來源:互聯網
上載者:User

一、覆寫概念

既然現在出現了繼承的關係,那麼就存在了子類和父類的聯絡,而在子類之中有可能定義和父類完全相同的方法或屬性的名稱,這個時候就稱為覆寫了。

二、方法的覆寫

當子類定義了和父類在方法名稱、傳回值類型、參數類型及個數完全相同的方法的時候,稱為方法的覆寫。

沒有覆寫的操作:

package com.wz.overridedemo;class A {    public void print() {        System.out.println("Hello World .");    }}class B extends A {}public class Test {    public static void main(String args[]) {        B b = new B();        b.print(); // 方法從父類繼承而來    }}

運行結果:

Hello World .

這時執行個體化的是子類對象,但是在子類中沒有print()方法,那麼就使用從父類中繼承而來的pritn()方法。

實現覆寫:

package com.wz.overridedemo;class A {    public void print() {        System.out.println("Hello World .");    }}class B extends A {    public void print() { // 方法名稱、參數類型及個數、傳回值全相同        System.out.println("世界,你好。");    }}public class Test {    public static void main(String args[]) {        B b = new B();        b.print(); // 方法從父類繼承而來    }}

運行結果:

世界,你好。

當一個類中的方法被覆寫後,如果執行個體化的是這個子類對象,則調用的方法就是被覆寫過的方法。

在進行方法覆寫的時候有一點需要注意:被子類所覆寫的方法不能擁有比父類更嚴格的存取控制許可權。
如果此時父類之中的方法是default許可權,那麼子類覆寫的時候只能是default或public許可權,而如果父類的方法是public,那麼子類之中方法的存取權限只能是public。

當一個子類覆寫了一個父類方法的時候,子類要想調用父類的被覆寫過的方法,要在方法前要加上“super”:

package com.wz.overridedemo;class A {    public void print() {        System.out.println("Hello World .");    }}class B extends A {    public void print() {        super.print();        System.out.println("世界,你好。");    }}public class Test {    public static void main(String args[]) {        B b = new B();        b.print(); // 方法從父類繼承而來    }}

運行結果:

Hello World .世界,你好。

一定要記住操作範圍:
(1)this.方法():先從本類尋找是否存在指定的方法,如果沒有找到,則調用父類操作;
(2)super.方法():直接由子類調用父類之中的指定方法,不再找子類。

問題來了:請問以下的操作是覆寫嗎。

package com.wz.overridedemo;class A {    private void print() {        System.out.println("Hello World .");    }    public void fun() {        this.print();    }}class B extends A {    public void print() { // 不叫覆寫        System.out.println("世界,你好。");    }}public class Test {    public static void main(String args[]) {        B b = new B();        b.fun(); // 方法從父類繼承而來    }}

運行結果:

Hello World .

首先從覆寫的概念上來講:現在父類的許可權是private,而子類是public,的確是擴大了許可權,而且方法的參數名稱及個數、傳回值類型都一樣。但這種情況在開發之中是不會出現的,使用了private定義的操作都無法覆寫。

三、this和super的區別

四、方法重載與覆寫的區別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.