標籤:存取修飾詞 資訊隱藏 強制轉換 載入 protected 開發 值方法 color 延伸
1、封裝
封裝是物件導向的三大特性之一,就是將類的狀態資訊隱藏在類內部,不允許外部程式直接存取,而通過該類提供的方法來實現對隱藏資訊的操作和訪問。
封裝的好處:隱藏類的實現細節;讓使用者只能通過程式規定的方法來訪問資料;可以方便的加入存取控制語句,限制不合理操作。
封裝的步驟:修改屬性的可見度來限制對屬性的訪問;為每個屬性建立一對賦值方法和取值方法,在賦值方法中加入對屬性的存取控制語句。
封裝使用到的許可權控制符:private(私人的)、public(公開的)、protected(對子類和同包的類開放的)
延伸:static修飾符
static可以用來修飾屬性、方法、代碼塊。static修飾的變數是屬於這個類所有的,不屬於某一個對象。所以由這個類建立出來的所有對象共同享用一個static變數。
被static修飾的屬性和方法通常被稱之為類屬性和類方法。不被static修飾的則成為執行個體屬性和執行個體方法。
static塊:static塊只在類被建立時載入一次,直到程式結束。通常用於初始化在程式中從程式開始到程式結束只賦一次值的屬性。
文法:static {//代碼塊}
2、繼承
繼承是物件導向的三大特性之一,是Java中實現代碼重用的重要手段之一。Java中只支援單繼承,即每個類只能有一個直接父類。
在Java中,所有的Java類都直接或間接的繼承了Object類。Object類是所有Java類的祖先。在定義一個類時,如果沒有使用extends關鍵字,那麼這個類直接繼承Object類。
在Java中,子類可以從父類中繼承到以下“財產”:
1.繼承public和protected修飾的屬性和方法,無論子類和父類是否在同一個包裡。
2.繼承預設許可權修飾符(friendly)修飾的屬性和方法,但子類和父類必須在同一個包裡。
3.無法繼承父類的構造方法。
4.無法繼承private修飾的屬性和方法。
另外,在子類中可以根據需求對從父類中繼承的方法進行重寫(或稱覆蓋)。在進行重寫的時候需要注意以下幾點:
1.重寫方法和被重寫方法必須具有相同的方法名。
2.重寫方法和被重寫方法必須具有相同的參數列表。
3.重寫方法的傳回值類型必須和被重寫方法的傳回值類型相同或是其子類。
4.重寫方法不能縮小被重寫方法的存取權限。
super關鍵字:
在使用繼承來編程的過程中常常會用到“super”關鍵字。
super代表對當前對象的直接父類對象的預設引用。在子類中可以通過super關鍵字來訪問父類中的成員。
在使用super關鍵字訪問父類成員時,需要注意以下幾點:
1.super關鍵字必須出現在子類(子類的方法和構造方法)中,而不是其他位置。
2.可以訪問父類的成員,如父類的屬性、方法、構造方法。
3.使用時需注意父類中許可權的限制,不能使用super訪問父類中private修飾的成員。
例:
1 super.name; //訪問直接父類的name屬性2 super.test(); //訪問直接父類的test方法3 super(name); //訪問直接父類的對應構造方法,只能出現在構造方法中
關於繼承中構造方法需要注意的事項:
1.如果子類中沒有顯示的調用父類的構造方法,系統會優先調用父類中的無參構造方法。
2.在程式運行時,總是會先調用父類的構造方法。
延伸:重載:
重載是同一個類中的方法有不同的實現,只要求方法名和參數列表不同,和傳回值類型、存取修飾詞無關。
3、抽象類別和抽象方法
C#中的抽象類別和抽象方法基本和Java中的一樣,之前已總結C#中的抽象類別和抽象方法,故此次只做簡單總結&回顧。
在Java中抽象類別和抽象方法的特點如下:
1.抽象類別和抽象方法都通過abstract關鍵字來修飾。
2.抽象類別不能執行個體化。抽象類別中可以沒有、有一個或多個抽象方法,也可以全部都是抽象方法。
3.抽象方法只有聲明,沒有方法實現。由抽象方法的類必須是抽象類別。子類必須重寫所有的抽象方法,除非子類還是一個抽象類別。
延伸:final關鍵字:
final可以用來修飾類、方法和屬性,不能修飾構造方法。
final修飾的類被稱為“最終類”,不能被繼承。
final修飾的方法不能被重寫。
final修飾的屬性會變成常量,除初始化時不能在其他地方被修改。
4、多態
C#中的多態和Java中的基本相同,因之前做過C#的多態總結,故此次只做簡單總結。
多態即同一個實現介面,使用不同的執行個體而執行不同的操作。
子類轉換成父類時需注意的規則:
1.將一個父類的引用指向一個子類對象,稱為向上轉型,自動進行類型轉換。
2.通過父類引用變數調用的方法是子類覆蓋或繼承的父類的方法,不是父類的方法。
3.通過父類引用變數無法調用子類特有的方法。
父類轉換成子類時需注意的規則:
1.父類轉換成子類稱為向下轉型,需要進行強制轉換。
2.在強制轉換時為了避免一場,可以通過instanceof關鍵字。
instanceof關鍵字:
instanceof關鍵字用來判斷一個對象是否屬於一個類或者實現了一個借口,結果為true或false。和C#中的is關鍵字作用相同。
5、介面
介面和抽象類別大致相同,抽象類別注重的是代碼的複用,而介面注重的是代碼的擴充和維護。介面是一種規範和標準,可以約束類的行為。
通過面向介面編程可以降低代碼間的耦合性,提高代碼的可擴充性和可維護性。
在開發系統時,主體構架使用介面,介面構成系統的骨架,這樣就可以通過更換實現介面的類來實現更換系統。
介面的定義:
1.介面的命名規則和類相同。
例: public interface 介面名 {
}
2.介面中可以定義常量,不能定義變數。介面中的屬性都會自動用public static final修飾。介面中的常量必須在定義時指定初始值。
3.介面中所有關的方法都是抽象方法。介面中方法都會自動用public abstract修飾。
4.介面不能被執行個體化,介面中不能有構造方法。
5.介面之間通過extends實現繼承關係。一個介面可以繼承多個介面,但介面不能繼承類。
6.介面的實作類別必須實現介面中的全部方法,否則必須定義為抽象類別。
一個類只能有一個直接父類,但可以通過implements實現多個介面。但如果在繼承父類的同時又實現了介面的時候,extends關鍵字必須在implements關鍵字之前。
C#中介面的使用和Java中的大致相同,只是在實現的時候使用冒號“:”而不是implements。
Java物件導向核心技能