java覆蓋和隱藏

來源:互聯網
上載者:User

標籤:結果   void   long   exception   nbsp   父類   The   system   not   

隱藏指的是子類把父類的屬性或者方法隱藏了,即將子類強制轉換成父類後,調用的還是父類的屬性和方法,而覆蓋則指的是父類引用指向了子類對象,調用的時候會調用子類的具體方法。

(1) 變數只能被隱藏(包括靜態和非靜態),不能被覆蓋

(2) 可以用子類的靜態變數隱藏父類的靜態變數,也可以用子類的非靜態變數隱藏父類的靜態變數,也可以用非最終變數(final)隱藏父類中的最終變數;

(3) 靜態方法(static)只能被隱藏,不能被覆蓋;

(4) 非靜態方法可以被覆蓋;

(5) 不能用子類的靜態方法隱藏父類中的非靜態方法,否則編譯會報錯;

(6) 不能用子類的非靜態方法覆蓋父類的靜態方法,否則編譯會報錯;

(7) 不能重寫父類中的最終方法(final);

(8) 抽象方法必須在具體類中被覆蓋;

執行個體:

SuperClass類:

package com.yilong.test.scjp;

public class SuperClass {

    public static int i = 1;

    public int j = 2;

    public final int k = 3;

    public static void method1() {

       System.out.println("SuperClass Method1");

    }

    public void method2() {

       System.out.println("SuperClass Method2");

    }

    public final void method3() {

       System.out.println("SuperClass Method3");

    }

}

SubClass類:

package com.yilong.test.scjp;

public class SubClass extends SuperClass {

    public static int i = 2;//無論是不是static,都能隱藏父類的變數i

    public static int j = 1;

    public final int k = 4;//無論是不是final,都能隱藏父類的變數k

    public static void method1() {

       System.out.println("SubClass Method1");

    }

    public void method2() {

       System.out.println("SubClass Method2");

    }

    //Cannot override the final method from SuperClass

    /*public final void method3() {

       System.out.println("SubClass Method3");

    }*/

    public static void main(String[] args) {

       SuperClass sc = new SubClass();

       System.out.println("i = " + sc.i);

       System.out.println("j = " + sc.j);

       System.out.println("k = " + sc.k);

       sc.method1();//靜態方法只能被隱藏

       sc.method2();

      

       SubClass subc = new SubClass();

       System.out.println("i = " + subc.i);

       System.out.println("j = " + subc.j);

       System.out.println("k = " + subc.k);

       subc.method1();

       subc.method2();

    }

}

列印結果:

i = 1
j = 2
k = 3
SuperClass Method1
SubClass Method2
i = 2
j = 1
k = 4
SubClass Method1
SubClass Method2

 

補充:子類重寫父類的方法時候,不能拋出與父類方法不同的異常。意味著:如果父類的方法拋出了異常,子類重寫該方法時沒有拋出異常是合法的;但是如果父類中的方法沒有拋出異常,而子類重寫該方法時拋出了異常,那麼就會編譯錯誤;另外,如果子類在重寫父類的方法的時候拋出的異常與父類方法中拋出的異常不一樣,那麼也是會編譯錯誤的,如父類方法中拋出的是InterruptedException,而子類重寫該方法時拋出的是Exception,那麼也會編譯錯誤。

java覆蓋和隱藏

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.