Java-Java物件導向程式設計

來源:互聯網
上載者:User

標籤:over   解構函式   核心   原來   interface   全面   color   產生   這一   

2017-10-09 17:23:52

在物件導向技術中,將客觀世界中的一個事物作為一個對象來考慮,比如有個張先生,他就是一個對象。每個對象都有自己的屬性和行為。張先生的屬性根據需要有姓名、性別、身高等,他的行為有開車,閱讀,跑步等。從程式設計的角度來看,事物的屬性可以用變數來描述,行為則用方法來反映。

 

一、物件導向設計的核心技術

物件導向程式設計的核心技術主要是封裝、繼承和多態性。

  • 封裝

類是封裝的基本單元。通過封裝可以隱藏類的實現細節,也可以避免對類中屬性的直接操作。可以通過類的公用介面訪問類中的變數,而不必知道這個介面的具體實現方式。只要這個方法的名字和參數不變,即使類中的變數被重新定義,或方法的代碼被修改,對類中的變數的訪問也不會受到影響。比如,你在電腦上安裝了一個音效卡,你不必知道音效卡的內部結構,也不必知道功能如何?的,因為實現音效卡功能的繼承電路被封裝了。你只要知道音效卡應該裝在電腦主板的什麼位置,其他的裝置如音箱,光碟機怎樣和音效卡串連就可以了。

  • 繼承

繼承是對類的功能的重用和擴充。通過對某一個類的繼承產生一個新的子類,子類既有從某個類中繼承下來的功能,又可以自行定義自己的變數和方法,產生新的功能。

  • 多態性

多態性指的是方法的名字相同,但實現不同。即“同一介面,多個方法”。如有三個方法,分別用來計算圓、矩形、三角形面積,他們的名字可以都叫做area。

 

二、類的結構

Java是一種完全物件導向對程式設計語言。他所有的屬性類型和方法都封裝在類中,Java繼承了C++的有點,但放棄了那些含糊,複雜和容易出錯的特性。Java所實現的物件導向的特性,降低了程式的複雜性,實現了代碼的可重用性,提高了運行效率。

  • 類的聲明格式

[修飾符]class 類名 [extends 超類名][implements 介面名]

{

類主體

}

修飾符包含存取權限有兩種,要麼預設,要麼public。如果在一個源檔案中有多個類的話,只能有一個類的許可權可以是public,其餘的類的許可權必須是預設。public類的名字應該和檔案同名,同時main函數也要放在該類中。Java中public許可權指所有的類都可以訪問,而預設的存取權限則是指只允許同一個包的類進行訪問。

        final:final修飾的類為最終類,這種類不能被繼承。

     abstract:抽象類別,不能執行個體化

  • 成員變數

[修飾符][static][final][transient] 變數類型 變數名;

修飾符:預設的,public,protected,private

static:靜態變數

final:常量

transient:臨時變數

  • 成員方法

[修飾符]傳回型別 方法名(參數表)[throws <異常類>]

{

方法體;

}

這裡的修飾符包含存取權限,共有四種,即:預設的,public,protected,private。

        static:靜態方法

        abstract:抽象方法(無方法體的方法)

        final:最終方法(不能被子類繼承的方法)

        throws:拋出異常

  • 存取權限的說明

public:所有的類都能訪問

protected:不同包的子類可以訪問

預設:同一包能訪問

private:同一類可以訪問

 

三、對象的構造和初始化以及對象的銷毀

  • 構造方法

構造方法沒有傳回值,且構造方法的名字應該和這個類一致。

例如:Date(int m,int n){...}

在建立對象的時候會自動調用相應的構造方法。

  • 對象的銷毀

對象的生命週期是指對象的建立、使用和銷毀這一過程。對象的銷毀是指當對象使用完成後,釋放對象佔用的資源。

Java能自動判斷對象是否在使用,並自動銷毀不在使用的對象,收回對象所佔用的資源。在這種模式下我們並不知道對象銷毀的具體時間。

此外,我們可以在程式中定義finalize()方法,使得對象在銷毀之前執行該方法。該方法的基本格式如下:

[修飾符]void finalize(){}

java提供finalize()方法,記憶體回收行程準備釋放記憶體的時候,會先調用finalize()。

        (1).對象不一定會被回收。

       (2).記憶體回收不是解構函式。

       (3).記憶體回收只與記憶體有關。

       (4).記憶體回收和finalize()都是靠不住的,只要JVM還沒有快到耗盡記憶體的地步,它是不會浪費時間進行記憶體回收的。

 

四、靜態成員

類中有一種特殊的成員,他不屬於某一個單獨的對象,而是屬於整個類所有。另外,Java中static不可以用來修飾局部變數。靜態成員函數只能訪問靜態成員變數。

 

五、類的繼承

如果要擴充原有的程式的功能,可以對原來的類進行修改或增加一個新類,但是這樣就不符合開閉原則了。同時,也會影響原來的類的相關代碼,或者造成代碼的重複。

一種好的方法是通過繼承來重用已有的代碼,同時增加新的代碼來進行功能的擴充。

繼承是物件導向設計的重要方法,被繼承的類稱為超類,從超類派生的新類稱為子類。子類中包含兩個部分,一個是從超類中繼承下來的變數和方法,一個是自己新增加的方法和變數。

Java中只支援單重繼承,不支援多重繼承,所以一個類只能有一個超類。

  • 聲明子類

[修飾符]class 子類名 extends 超類名

{...}

子類的對象也是超類的對象,超類的對象不一定是子類的對象。

成員變數的繼承規則:子類只繼承超類中非private的部分;

     隱藏原則(hiding):子類的成員變數和超類的成員變數同名的時候,超類的成員變數被隱藏。

成員方法的繼承規則:子類只繼承超類中非private的部分;

       覆蓋原則(Override):子類的成員方法和超類的成員方法同名的時候,超類的成員方法被子類的成員方法覆蓋。

  • 子類的構造方法

在調用子類的構造方法的時候,需要先調用超類的構造方法,子類的構造方法的參數的前面幾個,是給超類的構造方法使用的。在子類的構造方法體中,使用super進行顯示的調用超類的構造方法,並將此語句放在構造方法體的最前面。如果超類中有預設的構造方法,那麼在子類的構造方法中,可以不顯示的調用超類的構造方法。

  • null,this,super

null:表示Null 物件,即沒有建立類的任何執行個體。

this:代指當前的對象,是對象的引用。訪問本類的成員,this.<變數名>,this.<方法名>,調用本類的構造方法this(參數表);

super:超類的引用,可以使用super來引用被子類屏蔽的超類的成員,super.<變數名>,super.<方法名>,調用超類的構造方法super(參數表);

 

六、最終類和抽象類別

  • 最終類和最終方法

被final修飾的類和方法稱為最終類和最終方法,這種類無法被繼承,這種方法不會在子類中被覆蓋,也就是說子類中不能有和此方法同名的方法。

final class Last{...};

public final void printsuper(參數表){...};

  • 抽象類別和抽象方法

抽象方法是必須在子類被覆蓋的方法,在聲明的時候,用關鍵字abstract將方法說明為抽象方法,並不設方法體。

含有抽象方法的類為抽象類別,也需要用abstract修飾,他是一種不能執行個體化的類。

abstract class <類名>{...abstract 方法}

proected abstract void write();

注意:對於成員方法,不能同時使用static和abstract說明,因為static不用執行個體化就可以調用,而abstract必須進行執行個體化實現。

對於類,不能同時使用final和abstract進行修飾,因為這兩種方式明顯是相反的。

 

七、類的多態性

多態是指同一名稱,多種實現。多態的實現主要通過重載(overloading)和覆蓋(override)來完成。

  •  重載

方法的名字相同,但參數不同(注意僅傳回值不同不能算作重載),稱為重載。在執行的時候,根據參數的不同來決定執行哪個方法。

  •  覆蓋

子類和超類中有同名的方法,且參數也相同,子類中的方法將覆蓋超類的方法。

* 前期綁定和後期綁定的概念

對於方法的重載,在程式編譯的時候,根據調用語句中給出的參數,就可以決定在程式中執行時調用的版本,這種稱為編譯時間的綁定,也叫做前期綁定;

對於方法的覆蓋,要在程式執行時,才能決定調用同名方法的版本,這稱為運行時的綁定,也叫做後期綁定。

 

八、介面

在Java中,由於不支援多重繼承,所以引入了介面的概念。一個類可以有一個超類和多個介面。Java中的物件導向編程也被戲稱為面向介面編程。足見介面的概念的重要性。

  • 介面的聲明

介面是一個特殊的類,他是由靜態常量和抽象方法組成的,並且不包含變數和方法的實現。

[修飾符] interface 介面名{...}

其中修飾符可以是public或者預設存取控制。

介面中的變數預設是static final ,且必須被賦初值。如果介面是public,那麼介面中的成員都隱含是public存取權限。

  • 介面的實現

一個介面可以被一個類或者多個類實現。當一個類實現了一個介面,它必須實現這個介面中的所有方法,這些方法都要被說明成public。使用關鍵詞implements實現介面。

class 類名 implements 介面1,介面2...

 

Java-Java物件導向程式設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.