首頁  >  文章  >  Java  >  java物件導向是什麼

java物件導向是什麼

藏色散人
藏色散人原創
2019-05-23 17:28:595263瀏覽

java物件導向是什麼

java物件導向是什麼?

Java物件導向物件詳解

#前言:接觸專案開發也有很長一段時間了,最近開始萌出想回過頭來寫寫以前學過的基礎知識的想法。一是原來剛開始學習接觸編程,一個人跌跌撞撞摸索著往前走,初學的時候很多東西理解的也懵懵懂懂,後來實踐的多了,有些東西才慢慢清楚;二是經過一定的實踐之後,反過頭來再去學習一些基礎東西才能夠理解的更透徹;三是有些東西基礎但是確很重要,是值得好好搞一搞的。

1、物件導向

#物件導向(Object Oriented)是一種新興的程式設計方法,或是一種新的程式設計規範(paradigm),其基本想法是使用物件、類別、繼承、封裝、多型等基本概念來進行程式設計。從現實世界中客觀存在的事物(即物件)出發來建構軟體系統,並且在系統構造中盡可能運用人類的自然思維方式。

2、物件

#物件是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個物件由一組屬性和對這組屬性進行操作的一組服務組成。

類別的實例化可產生對象,一個物件的生命週期包含三個階段:產生、使用、消除。

當不存在對一個物件的參考時,該物件成為一個無用物件。 Java的垃圾收集器會自動掃描物件的動態記憶體區,把沒有引用的物件當作垃圾收集起來並釋放。當系統記憶體用盡或呼叫System.gc( )要求垃圾回收時,垃圾回收執行緒與系統同步運作。

3、類別

#類別是一組具有相同屬性和方法的對象的集合,它為屬於該類別的所有物件提供了統一的抽象描述,其內部包括屬性和方法兩個主要部分。在物件導向的程式語言中,類別是一個獨立的程式單位,它應該有一個類別名稱並包括屬性和方法兩個主要部分。

Java中的類別實作包括兩個部分:類別宣告和類別體。

類別宣告

#
[public][abstract|final] class className [extends superclassName] [implements interfaceNameList]{……}

#其中,修飾符public,abstract,final 說明了類別的屬性,className為類別名,superclassName為類別的父類別的名字,interfaceNameList為類別所實作的介面清單。

類別體

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關鍵字,關鍵字引用了目前類別的父類別。

▶ 子類別函數的存取修飾權限不能低於父類別的。

以上是java物件導向是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn