標籤:結構 數列 layer 設計 private 執行個體化 面向 存取權限 一個
1. 類和對象是物件導向編程思想中的核心和基礎。類是作為對象的抽象而存在的,所有的對象都依據相應的類來產生,在物件導向的術語中,這個產生對象的過程稱為“執行個體化”。類就是對一類事物或者一類對象的一個歸類或者說劃分。我們甚至可以說,”類“只是一個形容詞,而‘對象‘就是這個形容詞所形容的其中一個”實體物件“。當然也有例外,比如我們都知道Java裡面有一個關鍵字 ‘static‘,大家都知道被static所修飾的變數或者方法,在使用的時候是不需要執行個體化對象的.只需使用類名+變數名/方法名即可。static對象/方法歸屬於當前類,非static對象/方法歸屬於當前’對象’,對象是類的一份子,當然是可以使用static對象,反過來則不行。
建構函式是對象被建立的時候提供的一種特殊的資料結構,這裡需要明白的是建構函式本身不是函數。它具有和它所在的類完全一樣的名字。一旦定義好一個建構函式,該對象在被執行個體化的過程會自動調用它,而建構函式本身沒有任何傳回型別,不能錯誤地認為建構函式的傳回型別是void,建構函式傳回值的類型就是該類本身。
建構函式在原始碼層級我們可以認為是一個特殊的方法,構造方法有時候我們又稱為一個類的構造子,其特徵如下:
[1]建構函式的方法名必須與類名相同。
[2]建構函式沒有傳回型別,也不能使用void作為傳回型別,在方法名前面不能生命方法類型。
[3]建構函式的作用是為了完成對象初始化,它能夠把定義對象時的參數傳給對象。
[4]一個類可以有多個建構函式,建構函式同樣支援重載,重載法則遵循函數的重載法則。
[5]如果沒有定義任何建構函式系統會預設一個無參數的建構函式,此函數什麼也不做。
2. 類的繼承:繼承是所有OOP語言不可缺少的部分,java類的繼承主要通過extends關鍵字來完成的。當建立一個類時,總是在繼承,如果沒有明確指出要繼承的類,就總是隱式地從根類Object進行繼承。一旦繼承後,子類將獲得父類的成員屬性跟成員方法。基本文法:class類名extends父類名。
當子類繼承了某個類之後,便可以使用父類中的成員變數,但是並不是完全繼承父類的所有成員變數。具體的原則如下:
1)能夠繼承父類的public和protected成員變數;不能夠繼承父類的private成員變數;
2)對於父類的包存取權限成員變數,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員變數,如果在子類中出現了同名稱的成員變數,則會發生隱藏現象,即子類的成員變數會屏蔽掉父類的同名成員變數。如果要在子類中訪問父類中同名成員變數,需要使用super關鍵字來進行引用。
子類也並不是完全繼承父類的所有方法,原則如下:
1)能夠繼承父類的public和protected成員方法;不能夠繼承父類的private成員方法;
2)對於父類的包存取權限成員方法,如果子類和父類在同一個包下,則子類能夠繼承;否則,子類不能夠繼承;
3)對於子類可以繼承的父類成員方法,如果在子類中出現了同名稱的成員方法,則稱為覆蓋,即子類的成員方法會覆蓋掉父類的同名成員方法。如果要在子類中訪問父類中同名成員方法,需要使用super關鍵字來進行引用。
注意:隱藏和覆蓋是不同的。隱藏是針對成員變數和靜態方法的,而覆蓋是針對普通方法的。
子類是不能夠繼承父類的構造器,但是要注意的是,如果父類的構造器都是帶有參數的,則必須在子類的構造器中顯示地通過super關鍵字調用父類的構造器並配以適當的參數列表。如果父類有無參構造器,則在子類的構造器中用super關鍵字調用父類構造器不是必須的,如果沒有使用super關鍵字,系統會自動調用父類的無參構造器。
201671010116. 2016-2017-4《Java程式設計》認識對象與類及繼承