Java面向對象詳解(轉自博客園-OpenFire)

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關鍵字,該關鍵字引用了當前類的父類。
  • 子類函數的訪問修飾權限不能低於父類的。

原文鏈接:http://www.cnblogs.com/hellojava/archive/2013/02/27/2935450.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章