Java學習筆記(三):物件導向

來源:互聯網
上載者:User

標籤:div   概念   private   注意   bst   關鍵字   多態性   get   物件導向   

1.繼承
  • 文法

    class 父類{}class 子類 extends 父類{}
    只能多層繼承,不能多重繼承,子類不能直接存取父類中的私人成員,可通過getter和setter方法獲得
  • 子類對象new執行個體化(時)
  1. 會預設先調用父類的構造方法,再調用子類的構造方法去執行個體化所以,若父類和子類構造方法裡含有輸出語句,會在new時都列印
  2. 實際上,子類構造裡隱含了super();調用了父類構造
  • 方法的覆寫(“方法重寫”)
  1. 子類覆寫的方法不能擁有比父類方法更加嚴格的存取權限
    (如:父類--public ,子類也必須是--public )
  2. 父類方法被子類方法覆寫後,如何訪問該父類方法?
    ```
  3. 使用super();關鍵字即可,如:super.print();
  4. 在子類中,直接通過“super.方法()”形式即可訪問父類中的方法
    ```
  5. .特例:private-->到default不算覆寫,而是重新定義了一個新的方法!
  • 屬性的覆寫
  1. 繼承後重新定義屬性,同覆寫方法一致
  2. 特別:在子類中:

    1.super.name-->訪問父類中的name屬性2.this.name-->訪問“本“類中的name屬性
  • 重載與覆寫的區別
  1. 重載:

    01.方法名相同參數類型或個數不同02.對許可權沒有要求03.發生在同一個類中
  2. 覆寫:

    01.方法名稱,參數類型相同02.被覆寫的方法(即子類方法)不能擁有(比父類方法)更嚴格的存取權限03.發生在繼承類中
  • super關鍵字的作用
  1. super調用父類構造

    **同this一樣,該語句必須放在構造方法的句首**
  2. this與super的區別:

this:

01.屬性:調用本類中的屬性,若沒有,則從父類中尋找02.方法:調用本類中的方法,若沒有,則從父類中尋找03.構造:調用本領構造,必須放在構造方法的首行04.特殊:表示當前的對象

super:

01.屬性:訪問父類中的屬性02.方法:直接存取父類中的方法03.構造:調用父類構造,必須放在子類的構造方法裡的首行,如:super();
  • final關鍵字

注意:

1. 使用final聲明的“類‘’不能有子類2. 使用final聲明的”方法”不能被子類所覆寫3. 使用final聲明的變數即為常量,常量不可修改!4. public static final同時聲明的變數稱為全域”常“量
2.抽象類別
  • 定義規則
    ```
  1. 包含一個抽象方法的類必須是抽象類別
  2. 抽象類別和抽象方法都要使用abstract關鍵字聲明
  3. 抽象方法只需聲明而不需要實現
  4. 抽象類別必須被子繼承,子類(如果不是抽象類別)必須覆寫抽象類別中的全部抽象方法
  5. 抽象類別不能直接執行個體化,必須經由非抽象子類進行子類的執行個體化
    ```
  • 定義格式
    ```
  1. 抽象類別:abstract class A {}
  2. 抽象方法:存取權限 abstract 傳回值類型 方法名稱(參數);
    //在抽象方法中是沒有方法體的,不需要{}
  3. 子類的定義方法:class B extends A{ }
    在子類還必須覆寫抽象類別中的全部抽象方法
  4. 注意:抽象方法不要用private關鍵字聲明,因為抽象方法必須被子類覆寫
  5. 本質:抽象類別比普通類多了個抽象方法,除了不能直接進行對象的執行個體化操作外其實並沒有不同
    ```

    3.介面
  • 組成:
  1. 最重要的概念之一
  2. 由全域常量和公用的抽象方法組成

    interface 介面名稱 {全域常量;抽象方法;}
  3. 此處的抽象方法必須定義為public 存取權限,不可更改!!!
  4. 當然,也可不寫,預設public ,而不是default
  5. 通常,我們知道,全域常量是public static final,抽象方法是public abstract,但此處特殊,預設所以可省略該定義,實際上還有的

interface A{    String s="作者"; //定義全域常量    void print(); //定義抽象方法    String getInfo(); //抽象方法不需{}}
  • 介面的使用
  1. class 子類名 implements 介面A,介面B{ } !!!
    一個子類可以實現多個介面,class A implements B,C{}
  2. 實現後,必須覆寫全部抽象方法
  • 介面的繼承
  1. 一個介面不能繼承抽象類別,但一個介面允許繼承多個介面

    interface A{} interface B{} interface C extends B,C{}
  2. 即一個介面可以同時繼承多個介面,注意是繼承extends!!!
  3. 介面不能實現介面,可以實現繼承

    4.對象的多態性
  • 兩種
  1. 方法的重載和覆寫
  2. 對象的多態性
    01.向上轉型:子類對象-->父類對象,會自動完成
    02.向下轉型:父類對象-->子類對象,必須指定轉型的子類類型
  • 格式
  1. 對象向上轉型:父類 父類對象 =子類執行個體;

    如:B b =new B(); //子類執行個體化過程  A a =b; //向上轉型
  2. 對象向下轉型:子類 子類對象 =(子類)父類執行個體;

    如:A a =new B(); //向上轉型B b =(B)a; //向下轉型:A-->B
  • 調用:調用子類自己的方法,一定只能用子類的執行個體化對象
  • 注意:!!!在進行對象的向下轉型前,必須首先發生對象的向上轉型,否則將異常
  • 讀法:一個程式要從右至左:

    如:A a =new B();是B執行個體化了一個對象,該B的對象再向上轉型成為了A的對象a
    5.instanceof關鍵字
  • 用於判斷一個對象到底是誰哪個類的執行個體
  1. 對象 instanceof 類 -->返回boolean值
  • 用途:
  1. 如下:

    A a1=new B(); A a2=new A();
    01.a1同時是A和B的對象-->通過子類執行個體化的對象同時也是父類和子類的執行個體,所以可以直接向上或向下轉型
    02.a2隻是A的對象 -->此時不能向下轉型,因為沒有先向上轉型-->直接使用父類執行個體化本類對象,就不再是子類執行個體了,所以不能轉型
  2. 向下轉型前進行判斷操作,避免異常
    ```
    A a=new B();
    if( a instanceof B){ }

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.