《艾爾登法環》智敏法師build推薦 智敏法師怎麼玩
Java面向物件詳解
前言:接觸專案開發也有很長一段時間了,最近開始萌發出想回過頭來寫寫以前學過的基礎知識的想法。一是原來剛開始學習接觸程式設計,一個人跌跌撞撞摸索著往前走,初學的時候很多東西理解的也懵懵懂懂,後來實踐的多了,有些東西才慢慢清楚;二是經過一定的實踐之後,反過頭來再去學習一些基礎東西才能夠理解的更透徹;三是有些東西基礎但是確很重要,是值得好好搞一搞的。
1、面向物件
面向物件(Object Oriented)是一種新興的程式設計方法,或者是一種新的程式設計規範(paradigm),其基本思想是使用物件、類、繼承、封裝、多型等基本概念來進行程式設計。從現實世界中客觀存在的事物(即物件)出發來構造軟體系統,並且在系統構造中儘可能運用人類的自然思維方式。
2、物件
物件是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個物件由一組屬性和對這組屬性進行操作的一組服務組成。
類的例項化可生成物件,一個物件的生命週期包括三個階段:生成、使用、消除。
當不存在對一個物件的引用時,該物件成為一個無用物件。Java的垃圾收集器自動掃描物件的動態記憶體區,把沒有引用的物件作為垃圾收集起來並釋放。當系統記憶體用盡或呼叫System.gc( )要求垃圾回收時,垃圾回收執行緒與系統同步執行。
3、類
類是具有相同屬性和方法的一組物件的集合,它為屬於該類的所有物件提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在面向物件的程式語言中,類是一個獨立的程式單位,它應該有一個類名幷包括屬性和方法兩個主要部分。
Java中的類實現包括兩個部分:類宣告和類體。
類宣告
1 |
[ public ][ abstract | final ] class className [ extends superclassName] [ implements interfaceNameList]{……}
|
其中,修飾符public,abstract,final 說明了類的屬性,className為類名,superclassName為類的父類的名字,interfaceNameList為類所實現的介面列表。
類體
1 2 3 4 5 6 |
class className{
[ public | protected | private ] [ static ] [ final ] [ transient ] [ volatile ] type variableName; //成員變數
[ public | protected | private ] [ static ] [ final | abstract ] [ native ] [ synchronized ] returnType methodName([paramList]) [ throws exceptionList]{
statements
} //成員方法
}
|
成員變數限定詞的含義:
- static: 靜態變數(類變數)
- final: 常量;transient: 暫時性變數,用於物件存檔,用於物件的序列化
- volatile: 貢獻變數,用於併發執行緒的共享
方法的實現也包括兩部分內容:方法宣告和方法體。
方法宣告
方法宣告中的限定詞的含義:
- static: 類方法,可通過類名直接呼叫
- abstract: 抽象方法,沒有方法體
- final: 方法不能被重寫
- native: 整合其它語言的程式碼
- synchronized: 控制多個併發執行緒的訪問
方法宣告包括方法名、返回型別和外部引數。其中引數的型別可以是簡單資料型別,也可以是複合資料型別(又稱引用資料型別)。
對於簡單資料型別來說,java實現的是值傳遞,方法接收引數的值,但不能改變這些引數的值。如果要改變引數的值,則用引用資料型別,因為引用資料型別傳遞給方法的是資料在記憶體中的地址,方法中對資料的操作可以改變資料的值。
方法體
方法體是對方法的實現,它包括區域性變數的宣告以及所有合法的Java指令。方法體中宣告的區域性變數的作用域在該方法內部。若區域性變數與類的成員變數同名,則類的成員變數被隱藏。
為了區別引數和類的成員變數,我們必須使用this。this用在一個方法中引用當前物件,它的值是呼叫該方法的物件。返回值須與返回型別一致,或者完全相同,或是其子類。當返回型別是介面時,返回值必須實現該介面。
構造方法
- 構造方法是一個特殊的方法。Java 中的每個類都有構造方法,用來初始化該類的一個物件。
- 構造方法具有和類名相同的名稱,而且不返回任何資料型別。
- 過載經常用於構造方法。
- 構造方法只能由new運算子呼叫
4、面向物件的基本特性
封裝
封裝性就是儘可能的隱藏物件內部細節,對外形成一道邊界,只保留有限的介面和方法與外界進行互動。封裝的原則是使物件以外的部分不能隨意的訪問和操作物件的內部屬性,從而避免了外界對物件內部屬性的破壞。
可以通過對類的成員設定一定的訪問許可權,實現類中成員的資訊隱藏。
- private:類中限定為private的成員,只能被這個類本身訪問。如果一個類的構造方法宣告為private,則其它類不能生成該類的一個例項。
- default:類中不加任何訪問許可權限定的成員屬於預設的(default)訪問狀態,可以被這個類本身和同一個包中的類所訪問。
- protected:類中限定為protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。
- public:類中限定為public的成員,可以被所有的類訪問。
繼承
子類的物件擁有父類的全部屬性與方法,稱作子類對父類的繼承。
- Java中父類可以擁有多個子類,但是子類只能繼承一個父類,稱為單繼承。
- 繼承實現了程式碼的複用。
- Java中所有的類都是通過直接或間接地繼承java.lang.Object類得到的。
- 子類不能繼承父類中訪問許可權為private的成員變數和方法。
- 子類可以重寫父類的方法,即命名與父類同名的成員變數。
Java中通過super來實現對父類成員的訪問,super用來引用當前物件的父類。super 的使用有三種情況:
- 訪問父類被隱藏的成員變數,如:super.variable;
- 呼叫父類中被重寫的方法,如:super.Method([paramlist]),super()呼叫父類構造方法;
- 呼叫父類的建構函式,如:super([paramlist]);
多型
物件的多型性是指在父類中定義的屬性或方法被子類繼承之後,可以具有不同的資料型別或表現出不同的行為。這使得同一個屬性或方法在父類及其各個子類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。
Java的多型性體現在兩個方面:由方法過載實現的靜態多型性(編譯時多型)和方法重寫實現的動態多型性(執行時多型)。
- 編譯時多型:在編譯階段,具體呼叫哪個被過載的方法,編譯器會根據引數的不同來靜態確定呼叫相應的方法。
- 執行時多型:由於子類繼承了父類所有的屬性(私有的除外),所以子類物件可以作為父類物件使用。程式中凡是使用父類物件的地方,都可以用子類物件來代替。一個物件可以通過引用子類的例項來呼叫子類的方法。
過載(Overloading)
- 方法過載是讓類以統一的方式處理不同資料型別的手段。
- 一個類中可以建立多個方法,它們具有相同的名字,但具有不同的引數和不同的定義。呼叫方法時通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法。
- 返回值型別可以相同也可以不相同,無法以返回型別作為過載函式的區分標準。
重寫(Overriding)
- 子類對父類的方法進行重新編寫。如果在子類中的方法與其父類有相同的的方法名、返回型別和引數表,我們說該方法被重寫 (Overriding)。
- 如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
- 子類函式的訪問修飾許可權不能低於父類的。