大數據之路day05_1--初識類、對象

1.1 什麼是面向對象
        面向對象思想就是不斷的建立對象(屬性與行爲的封裝,讓兩者做爲總體參與程序執行),使用對象,指揮對象作事情。(在已有對象的狀況下,直接使用對象,而再也不去考慮對象的內部構造)編程

        面向對象的開發來說也分爲三個過程:OOA(面向對象分析)、OOD(面向對象設計)、OOP(面向對象編程)安全

 

1.2 瞭解對象的內部結構this


1.2.1 成員變量和成員方法
        成員變量:訪問修飾符修飾符(做用範圍) 類型(存儲結構) 屬性名稱(引用)=初始值(實際物理值);spa

       訪問修飾符:可使用四種不一樣的訪問修飾符中的一種,包括public(公共的),protected(受保護的),無修飾符和 private(私有的)。public 訪問修飾符表示屬性能夠從任何其它代碼調用。private 表示屬性只能夠由該類中的其它方法來調用。       設計

        修飾符:是對屬性特性的描述,例如:static、final 等等。對象

        類型:屬性的數據類型,能夠是任意的類型。繼承

        屬性名稱:任何合法標識符開發

        初始值:賦值給屬性的初始值。若是不設置,那麼會自動進行初始化,基本類型使用缺省值,對象類型自動初始化爲 null。get

        成員變量有兩種:一種是被static關鍵字修飾的變量,叫類變量或者靜態變量(在類加載時初始化);另外一種沒有static修飾,爲實例變量(在對象建立時初始化)。編譯

        兩者在程序運行時的區別,實例變量屬於某個對象的屬性,必須建立了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。靜態變量不屬於某個實例對象,而是屬於類,因此也稱爲類變量,只要程序加載了類的字節碼,不用建立任何實例對象,靜態變量就會被分配空間,靜態變量就能夠被使用了(直接在方法區讀取數據)。總之,實例變量必須建立對象後才能夠經過這個對象來使用,靜態變量則能夠直接使用類名來引用

        成員方法:訪問修飾符 修飾符 返回值類型 方法名稱 (參數列表) throws 異常列表 {方法體}

        修飾符:是對方法特性的描述,例如:static、final、abstract、synchronized 等等。

        返回值類型:表示方法返回值的類型。若是方法不返回任何值,它必須聲明爲 void(空)。 Java 技術對返回值是很嚴格的,例如,若是聲明某方法返回一個int值,那麼方法必   須從全部可能的返回路徑中返回一個int值(只能在等待返回該 int 值的上下文中被調用。)

        方法名稱:能夠是任何合法標識符,並帶有用已經使用的名稱爲基礎的某些限制 條件。

        參數列表:容許將參數值傳遞到方法中。列舉的元素由逗號分開,而每個元素包含一個類型和一個標識符。

throws 異常列表:子句致使一個運行時錯誤(異常)被報告到調用的方法中,以便以合適的方式處理它。異常在後面的課程中介紹。

    花括號內是方法體,即方法的具體語句序列。

    和變量同樣分爲實例方法和靜態方法

 

1.2.2 構造方法
        目的:主要用來給對象的數據進行初始化

        格式:訪問修飾符類名() { }

1.2.3 代碼塊
        一、局部代碼塊

            在局部代碼塊(方法體)中定義的變量屬於局部變量,隨方法的調用建立,隨方法的出棧而消失

        二、構造代碼塊

            優先於構造方法執行(等同於將其放置在構造方法體中的首行),隨構造方法執行而執行

        三、靜態代碼塊

            只隨類的加載而加載,不管建立多少次對象,只執行一次。

        建立對象時代碼執行順序:

        靜態代碼塊(父類到子類)--構造代碼塊(父類)--構造方法(父類)--構造代碼塊(子類)--構造方法(子類)--方法(天然順序)

 

1.2.4 訪問修飾符
public                   package(default)                 protected              private

本類              √                  √                                √                       √

子類              √                  √                                √

同包              √                  √

全局              √

 

1.2.5 this和supper
        this:本類對象的引用,本類對象的構造器

        supper:父類對象的引用,父類對象的構造器

 

1.2.6 重寫(覆蓋)和重載
        重寫:等同於對重寫對象方法(非靜態方法)的引用,修飾符,返回類型,方法名和參數同樣

        重載:等同定義新的方法,只不過方法名和原來同樣,但參數必須不同(參數位置無關)

 

1.3 面對對象的特性


1.3.1 封裝
        隱藏不須要對外公開的屬性和方法,以減小對外耦合(一般將成員變量private,提供對應的getXxx()/setXxx()方法)

        而外部只能經過方法來控制成員變量的操做,可提升了代碼的安全性;同時把代碼用方法進行封裝,提升了代碼的複用性

 

1.3.2 繼承
        多個類有共同的成員變量和成員方法,抽取到另一個類中(父類),在讓多個類去繼承這個父類

特色:

    1.子類繼承父類的成員變量

      當子類繼承了某個類以後,即可以使用父類中的成員變量,可是並非徹底繼承父類的全部成員變量。具體的原則以下:

        1)可以訪問父類的public和protected成員變量;不可以訪問父類的private成員變量(能夠經過反射強制獲取);

        2)對於父類的包訪問權限成員變量,若是子類和父類在同一個包下,則子類可以繼承;不然,子類不可以繼承;

        3)對於子類能夠繼承的父類成員變量,若是在子類中出現了同名稱的成員變量,則會發生隱藏現象,即子類的成員變量會屏蔽掉父類的同名成員變量。若是要在子類中訪問父類中同名成員變量,須要使用super關鍵字來進行引用。

    2.子類繼承父類的方法

        1)可以訪問父類的public和protected成員方法;不可以訪問父類的private成員方法(可是能繼承);

        2)對於父類的包訪問權限成員方法,若是子類和父類在同一個包下,則子類可以繼承;不然,子類不可以繼承;

        3)對於子類能夠繼承的父類成員方法,若是在子類中出現了同名稱的成員方法,則稱爲覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法(可是父類的成員方法若是是靜態,子類也必須是靜態才能屏蔽,否則編譯錯誤,反之亦然)。若是要在子類中訪問父類中同名成員方法,須要使用super關鍵字來進行引用。

        注意:隱藏和覆蓋是不一樣的。隱藏是針對成員變量和靜態方法的,而覆蓋是針對普通方法的。

    3.構造器

        子類是不可以繼承父類的構造器,可是要注意的是,若是父類是有參構造,那麼子類必須有同類型參數構造,若是父類是無參構造,那麼子類任意構造均可。

 

1.3.3 多態
        父類的引用指向子類對象:父類類型  引用名稱= new 子類類型

        父類類型  引用名稱= (父類類型 引用名稱)new 子類類型

    A:多態成員變量

        當子父類中出現同名的成員變量時,多態調用該變量時:

        編譯時期:參考的是引用型變量所屬的類中是否有被調用的成員變量。沒有,編譯失敗。

        運行時期:也是調用引用型變量所屬的類中的成員變量。

        簡單記:編譯和運行都參考等號的左邊。

    B:多態成員方法

        編譯時期:參考引用變量所屬的類,若是沒有類中沒有調用的方法,編譯失敗。

        運行時期:參考引用變量所指的對象所屬的類,並運行對象所屬類中的成員方法。

        簡而言之:編譯看左邊(父類是否擁有該方法),運行看右邊(靜態都看左邊)   

相關文章
相關標籤/搜索