Java-Java面向對象程序設計

2017-10-09 17:23:52java

在面向對象技術中,將客觀世界中的一個事物做爲一個對象來考慮,好比有個張先生,他就是一個對象。每一個對象都有本身的屬性和行爲。張先生的屬性根據須要有姓名、性別、身高等,他的行爲有開車,閱讀,跑步等。從程序設計的角度來看,事物的屬性能夠用變量來描述,行爲則用方法來反映。編程

 

1、面向對象設計的核心技術ide

面向對象程序設計的核心技術主要是封裝、繼承和多態性。函數

  • 封裝

類是封裝的基本單元。經過封裝能夠隱藏類的實現細節,也能夠避免對類中屬性的直接操做。能夠經過類的公共接口訪問類中的變量,而沒必要知道這個接口的具體實現方式。只要這個方法的名字和參數不變,即便類中的變量被從新定義,或方法的代碼被修改,對類中的變量的訪問也不會受到影響。好比,你在計算機上安裝了一個聲卡,你沒必要知道聲卡的內部結構,也沒必要知道功能如何實現的,由於實現聲卡功能的繼承電路被封裝了。你只要知道聲卡應該裝在電腦主板的什麼位置,其餘的設備如音箱,光驅怎樣和聲卡鏈接就能夠了。this

  • 繼承

繼承是對類的功能的重用和擴充。經過對某一個類的繼承產生一個新的子類,子類既有從某個類中繼承下來的功能,又能夠自行定義本身的變量和方法,產生新的功能。spa

  • 多態性

多態性指的是方法的名字相同,但實現不一樣。即「同一接口,多個方法」。若有三個方法,分別用來計算圓、矩形、三角形面積,他們的名字能夠都叫作area。設計

 

2、類的結構對象

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:同一類能夠訪問

 

3、對象的構造和初始化以及對象的銷燬

  • 構造方法

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

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

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

  • 對象的銷燬

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

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

此外,咱們能夠在程序中定義finalize()方法,使得對象在銷燬以前執行該方法。該方法的基本格式以下:

[修飾符]void finalize(){}

java提供finalize()方法,垃圾回收器準備釋放內存的時候,會先調用finalize()。

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

       (2).垃圾回收不是析構函數。

       (3).垃圾回收只與內存有關。

       (4).垃圾回收和finalize()都是靠不住的,只要JVM尚未快到耗盡內存的地步,它是不會浪費時間進行垃圾回收的。

 

4、靜態成員

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

 

5、類的繼承

若是要擴展原有的程序的功能,能夠對原來的類進行修改或增長一個新類,可是這樣就不符合開閉原則了。同時,也會影響原來的類的相關代碼,或者形成代碼的重複。

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

繼承是面向對象設計的重要方法,被繼承的類稱爲超類,從超類派生的新類稱爲子類。子類中包含兩個部分,一個是從超類中繼承下來的變量和方法,一個是本身新增長的方法和變量。

Java中只支持單重繼承,不支持多重繼承,因此一個類只能有一個超類。

  • 聲明子類

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

{...}

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

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

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

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

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

  • 子類的構造方法

在調用子類的構造方法的時候,須要先調用超類的構造方法,子類的構造方法的參數的前面幾個,是給超類的構造方法使用的。在子類的構造方法體中,使用super進行顯示的調用超類的構造方法,並將此語句放在構造方法體的最前面。若是超類中有默認的構造方法,那麼在子類的構造方法中,能夠不顯示的調用超類的構造方法。

  • null,this,super

null:表示空對象,即沒有建立類的任何實例。

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

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

 

6、最終類和抽象類

  • 最終類和最終方法

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

final class Last{...};

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

  • 抽象類和抽象方法

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

含有抽象方法的類爲抽象類,也須要用abstract修飾,他是一種不能實例化的類。

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

proected abstract void write();

注意:對於成員方法,不能同時使用static和abstract說明,由於static不用實例化就能夠調用,而abstract必須進行實例化實現。

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

 

7、類的多態性

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

  •  重載

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

  •  覆蓋

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

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

對於方法的重載,在程序編譯的時候,根據調用語句中給出的參數,就能夠決定在程序中執行時調用的版本,這種稱爲編譯時的綁定,也叫作前期綁定;

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

 

8、接口

在Java中,因爲不支持多重繼承,因此引入了接口的概念。一個類能夠有一個超類和多個接口。Java中的面向對象編程也被戲稱爲面向接口編程。足見接口的概念的重要性。

  • 接口的聲明

接口是一個特殊的類,他是由靜態常量和抽象方法組成的,而且不包含變量和方法的實現

[修飾符] interface 接口名{...}

其中修飾符能夠是public或者默認訪問控制。

接口中的變量默認是static final ,且必須被賦初值。若是接口是public,那麼接口中的成員都隱含是public訪問權限。

  • 接口的實現

一個接口能夠被一個類或者多個類實現。當一個類實現了一個接口,它必須實現這個接口中的全部方法,這些方法都要被說明成public。使用關鍵詞implements實現接口。

class 類名 implements 接口1,接口2...

相關文章
相關標籤/搜索