面向對象

一、面向對象設計原則

1、職責單一
2、OCP原則(o:open c:close p:principle)開閉原則
3、依賴倒置:主要針對父類,可以更加靈活的實現

二、面向對象的三大特徵

1、封裝
2、繼承
3、多態
若是還有第四點,那麼就是抽象

三、面向過程與面向對象

面向過程:對一個流程的整個體系需要非常的熟悉,瞭解每一個細節,事必躬親。
面向對象:只針對自己所負責的那一塊區域,熟知這一小塊區域內的所有東西,其他的東西只管使用不負責內部的結構亦或是生產。

四、定義 類

(是對象的抽象)
    class 類名{
        //屬性和方法.
    }
    1、考慮有哪些類
    2、考慮每個類裏面的屬性和方法(合適的屬性或者方法應該出現在合適類中)
    3、類與類的關係
    一個文件中可以有多個類,但是隻允許有一個是public的,並且該public的類名和文件名一致。
(1)繼承
(2)依賴:關係比聚集還要弱  例如:班級和學生
(3)聚合:
    聚集-關係較弱   例如,球員和教練
    組合-關係較強   例如,人的身體各個部位

五、創建對象

類名 對象名 = new 類名();
訪問的對象的屬性:對象名.屬性
訪問的對象的方法:對象名.方法名();

六、構造方法

構造方法的特徵:
    1、方法名和類名相同
    2、沒有返回類型,連void也沒有
    3、構造方法是在new對象的時候進行調用
    4、當一個類建好之後默認會有一個沒有參數的構造方法
    5、當類裏面加了一個帶參數的構造方法之後,原來沒有參數的構造方法會自動消失,如果需要使用沒有參數的構造方法,需要特殊聲明

七、重載(overload) 靜態多態

特徵:
    1、方法名相同
    2、參數不同(參數的個數不同、參數的類型不同)與返回類型無關
    3、構造方法也可以重載

八、this

1、this代表的是當前對象
2、this只能出現在方法中
3、構造方法使用this互相調用的時候必須放在構造方法的第一行

九、包

1、作用:解決類的重名問題
2、包名的規範:將域名倒着寫
    類中使用包:package 包名;
    包的導入:import 包名.類名;

十、繼承

  1. 繼承作用

    繼承劃分了類的層次性,父類代表的是更一般、更泛化的類,而子類則是更爲具體、更爲細化;繼承是實現代碼重用、擴展軟件功能的重要手段,子類中與父類完全相同的屬性和方法不必重寫,只需寫出新增或改寫的內容,這就是說子類可以複用父類的內容,不必一切從零開始。 
    
  2. 繼承關係

    什麼是一種什麼,就是包含,例如 A∈B
    
  3. 構造方法

    在實例化子類對象的時候,會調用子類的構造方法。
    但是在調用子類構造方法的時候,默認會調用父類的沒有參數的構造方法,如果父類沒有無參的構造方法,那麼會報錯。
    如果非要調用父類有參數的構造方法,那麼需要在子類的構造方法中使用super進行顯式調用,但是這行代碼必須放在第一行。
    
  4. super

     在子類中調用父類的方法或者是屬性。
    

十一、重寫(overwrite override) 動態多態

又叫做 覆蓋      
1、目的:對父類的方法實現不滿意,在子類中重寫一個方法
2、重寫滿足的條件:
    A、繼承關係
    B、方法名相同,參數相同,返回類型一致或者兼容
    C、重寫方法不能使用比被重寫方法更嚴格的訪問控制權限
3、@Override 可以在編譯的時間檢查是不是重寫

十二、Object類

toString():輸出一個對象的時候,默認會調用toString方法,如果對默認的實現不滿意,可以自己去實現toString,這種就叫重寫。
equals():判斷2對象是否相等,默認的實現就是引用地址是否相等,如果對默認實現不滿意,自己重寫該方法。

十三、訪問控制符

訪問權限:
這裏寫圖片描述
private:可以修飾方法,屬性,內部類,即爲除了外部類的所有
default:默認,表現爲什麼都不寫,可以修飾外部類,內部類,方法,屬性
protected:同private
public:同default

十四、抽象類

1、有抽象方法的類一定是抽象類,抽象類中不一定有抽象方法。
2、抽象類不能被實例化,即爲不能被new
3、抽象類中有構造方法,若是被繼承,那麼必須要有一個沒有參數的構造方法,若是沒有無參數的構造方法,那麼會報錯。

PS:abstract,native 方法沒有實現。底層一般是c或者c++實現的

十五、final

1、可以修飾類,屬性和方法
2、final修飾的限制
(1)final修飾的類不能被用於繼承,剛好與abstract矛盾,即爲兩者不能同時出現。
(2)若是修飾屬性,那麼被修飾的屬性一旦賦值就不能被更改,但是可以不在聲明的時候賦值,可以通過構造方法的方式來賦值。
(3)若是修飾方法,那麼該方法不能被重寫,但是可以被重載。

十六、接口

1、接口的作用:爲了解決單一繼承不能滿足需要的問題。
2、定義接口 interface  
3、使用接口 implements
4、接口中定義的內容:接口之中可以定義屬性,方法。
5、接口與抽象類的區別
    (1)接口中的方法都是抽象的方法,默認爲public abstract;在抽象類中的方法可能有抽象的方法,但也可能沒有。
    (2)接口中沒有變量的說法,所有的定義聲明都默認爲public static final。
    (3)接口之中沒有構造方法;抽象類中有構造方法,但是兩者都不能被實例化,即爲都不能new,抽象類的構造方法僅僅是在被繼承之後給子類使用。
    (4)接口是被實現implements;抽象類是被繼承extends。
注:jdk 1.8接口裏可以放有實現的方法!
6、接口與類
類可以且僅僅可以繼承一個類,可以實現多個接口;接口只能繼承接口,但可以繼承多個接口。
7.抽象類與接口的設計
抽象類是用於被繼承的,兩者需要擁有包含關係,例如Animal和Cat;接口是用於被實現的,兩者只要有共同點就可以,例如Airport和Bird。

十七、多態

基本條件:
(1)需要有繼承或者是實現關係
(2)重寫
(3)父類引用子類對象

十八、static

可以修飾除外部類以外的所有。放在方法區的靜態池中。static修飾的屬性或是方法通過 類名.屬性 或者 類名.方法 就可以直接訪問,但同時也可以通過產生對象來訪問,但被static修飾的某個屬性不再屬於某個對象,而是所有同類對象公有的。

被static修飾的方法或者是變量被稱爲 類方法、類變量;其他的無static修飾的被叫做實例方法、實例變量。

發佈了38 篇原創文章 · 獲贊 1 · 訪問量 9429
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章