Java-物件導向篇下《二》

來源:互聯網
上載者:User

標籤:

1.繼承的概念

  • 物件導向的特點之一,可以實現對類的複用。可以通過以下兩種方法實現

  •       a.合成/彙總關係(包含其他類):將一個類當作另一個類的屬性。

  •       b.衍生類別:一個類繼承另一個類,實現繼承的類稱為衍生類別,被繼承類稱為父類,基類,超類。

  • 父類的成員方法和成員變數被子類繼承,但是父類的構造方法沒有被繼承。

  • 在Java中只支援單繼承,和C++多繼承不一樣。

2.super關鍵字

  1.super可以訪問父類的成員變數

  2.super可以調用父類的成員方法

  3.super可以在子類構造方法裡調用父類的構造方法

  注意:super只能在成員方法和構造方法裡使用,不能在static方法裡使用(和this一樣),

              在構造方法中使用必須放在第一行。

3.this和super關鍵字比較(都不能在static方法中調用)

        

4.方法覆蓋

  1. 方法覆蓋只存在子類和父類之間

  2. 子類覆蓋父類的方法時,存取權限不能縮小,可以擴大,其他寫法一樣

  3. 父類的靜態方法不能被子類覆蓋為非靜態方法

5.存取權限

   類的存取修飾詞

  1. public:任何包中的類(即一切的類)都可以訪問該類

  2. 預設值:同一包中的類可以訪問該類

   成員的存取修飾詞

  1. private:只對本類可見,對子類不可見

  2. 預設值:對同一包中的類可見

  3. protected:對同一包中的類和所有子類可見

  4. public:對一切類可見

  注意:訪問成員的前提是首選能訪問成員所在的類       

 6.重寫和重載的比較

    

7.對象的多態性

    多態是指參考型別在不同情況下的多種形態,也可以理解為通過指向父類的指標調用不同子類中覆蓋的方法

  • 一個基類的參考型別變數可以"指向"其子類的對象。

  • 一個基類的引用不可以訪問其子類中新增加的成員(屬性和方法)。

  • instanceof : 對象 instanceof  類名/介面   //判斷該對象是否是該類/該類的子類/實現該介面。

  • 子類對象可以當作父類對象來使用稱為向上轉型,反之稱為向下轉型。

8.抽象類別和抽象方法(abstract)

      抽象類別(abstract修飾):任何聲明為abstract的抽象類別無法執行個體化,除非其子類全部覆蓋其抽象方法,

                                     這樣子類就不是抽象類別,不一定要包含抽象方法,但是有抽象方法的類必須聲明為抽象類別。

      抽象方法(abstract修飾):沒有方法體的成員方法。不可以用abstract修飾構造方法。

      抽象類別的子類:1.抽象父類有抽象方法:

                              a.非抽象的子類:子類覆蓋重寫父類所有的抽象方法

                              b.抽象的子類:父類中的抽象方法只要有一個沒有覆蓋重寫而繼承了必須聲明為abstract類

                          2.抽象父類沒有抽象方法:

                              a.非抽象的子類:不用abstract修飾子類且不添加抽象方法即可(此時可以執行個體化)

                              b.抽象的子類:可以用abstract修飾,或者添加抽象方法再聲明為抽象類別。

       注意:抽象方法被可視化的修飾符修飾的只有兩個即public ,protected,即除了"預設存取修飾詞"

              "public","protected"修飾抽方法,其餘的(private ,static ,final)不可以修飾。

9.abstract,final,static比較

     

10.介面(interface)

    介面:比抽象類別還抽象的抽象類別,是抽象方法和常量值的定義的集合。沒有變數和方法的實現。

    介面常量:預設public static final 屬性(注意:不接受其他修飾符), type name=value;

    介面方法:預設public abstract 屬性(注意:不接受其他修飾符),returnType methodName (paramlist)

    介面的實作類別(implements):實現介面的類必須覆蓋所有介面的方法,否則成為抽象類別。可實現多個介面

    介面的好處:

  • 解決了Java的單一繼承帶來的局限性,也解決了C++多重繼承帶來的問題,

  • 多重繼承的危險會導致子類繼承同一方法的不同實現。而介面裡的方法都沒有實現,所以多重繼承的問題。

  • 通過介面實現不相關類的相同行為,而無需考慮這些類之間的關係。

  • 通過介面瞭解對象的互動介面,而無需瞭解對象所對應的類

11.抽象類別和介面的比較

    

12.多態性

        封裝是為了保護屬性的操作,繼承是為了擴充類的功能

        多態是由封裝性和繼承性引出物件導向程式設計語言的另一個特徵。

        多態的體現:方法的重載和重寫

     1.1 靜態多態性(編譯時間多態):由方法重載(overload)實現

     1.2 動態多態性(運行時多態):子類對象可以作為父類對象使用,有方法重寫(overridder)實現

13.對象的多態性

      對象的多態性主要分為兩種:

         1.向上轉型:

                  父類  父類對象=子類執行個體;//程式自動完成

           注意使用規則:

           操作的是父類對象,所以無法訪問子類新增加的成員(屬性和方法)。

           子類中覆蓋的方法和同名的成員變數

                a.成員變數(包括靜態變數)和靜態成員方法:編譯和運行都看左邊(看父類的)

                b.非靜態成員方法:編譯看左邊的,運行看右邊的(子類覆蓋的方法)。

         2.向下轉型:

                  子類 子類對象=(子類)父類對象;//需要強制轉換 

14.內部類(等價於一個非靜態成員方法即不可聲明static變數)

         在類的內部裡再定義另外一個類,則這個類稱為內部類。

         外部類的成員被內部類所知,而內部類的成員不被外部所知,只能執行個體化內部類來訪問其成員

    優點:可以方便的訪問外部類的私人屬性(最大優點),減少編譯後位元組碼檔案的大小

    缺點:使程式結構不清晰。

14.1 成員內部類(即執行個體內部類)

  • 成員內部類中不能定義static變數

  • 成員內部類持有外部類的引用

  • 檔案管理方面:編譯後會產生“外部類名$內部類名.class”的檔案

  • 外部執行個體化類的格式:

  •    Outer out=new Outer(); Outer.Inner  in=out.new Inner();

14.2 靜態內部類(外部類)

        用static聲明的內部類,稱為靜態內部類,相當於外部類。可以通過外部類.內部類來訪問

  • 靜態內部類不會持有外部類的引用。建立時可以不用建立外部類。

  • 靜態內部類可以訪問外部的靜態變數,如果要訪問外部類的成員變數必須通過執行個體化外部類訪問

  • 外部執行個體化類的格式

  •        Outer.Inner   in=new Outer.Inner();

14.3 局部內部類(在方法中定義的內部類)

  • 可以訪問外部類的成員,要想存取方法中局部變數必須為final類型才可以訪問

  • 局部內部類不能加private ,protected,public中任一個修飾符

  • 不能包含靜態成員。

14.4 匿名內部類

  • 如果一個內部類在整個操作中只使用一次的話,可以定義為匿名內部類

  • 沒有名字的內部類,這是Java為了方便我們編寫程式而設計的一個機制。有時候有的內部類

  • 只需要建立一個對象即可,以後再也不會用到這個類了。

  • 匿名內部類是在抽象類別和介面的基礎上發展起來的。它可以是繼承某個類,或是實現某個介面

  • 在檔案管理上:編譯後會產生“外部類名$編號.class”,編號為1,2,3....n,表示第幾個匿名內部類

     格式:

      new 父類或者抽象父類或者介面名()

      { 實現方法}.調用相應的方法;

總結:

   多態:非靜態方法-編譯時間看左邊,運行時看右邊。靜態方法和成員變數-都看左邊

   (非靜態)內部類:相當於一個非靜態方法,不能在裡面定義靜態變數,且內部類預設持有外部類的引用。

   (靜態)內部類:相當於外部類,不持有外部類的引用。

   靜態代碼塊->構造代碼塊->構造方法

 

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.