1. 程式人生 > >JAVA面向物件程式設計基礎複習(一)面向物件基本概念

JAVA面向物件程式設計基礎複習(一)面向物件基本概念

從今天開始有計劃的寫一些博文。內容主要涉及JAVA語言、面向物件程式設計、設計模式、android開發(這才是重點嘛)。今天開始寫 JAVA面向物件程式設計基礎複習這個系列的文章。

JAVA面向物件程式設計基礎複習目錄

     (二)異常處理與自定義異常

     (三)多執行緒

     (四)反射與註釋

(一)面向物件的基本概念

1.面向物件?還是面向螢幕?面向物件概述

1.1物件的概念

       在面向物件程式語言中,最重要的概念就是物件了。不是你物件~物件是一切實體概念的抽象概念。比如我現在打字的鍵盤,它就是個物件keyboard,我看到的顯示器monitor等等等~在面嚮物件語言的大陣營中JAVA算是個典型代表了,接下來我們所有的例子都是用JAVA語言描述的,不過也不妨礙不會JAVA語言的同學。因為思想都是相同的,只是在實踐的時候有細微的差別。

1.2類和例項

       類Class和例項Instance的關係就相當於廣義和狹義,整體和區域性的關係。

       類是對一類物件的抽象!例如人,每個人有不同的身高體重,性別年齡等不同的屬性(馬上講到)還有很多其他的功能,比如吃飯,上網,看電影(方法,馬上講到)。每個人都不同,但是把這些屬性和方法抽象出來,就能得到一個廣義的“人”。此人在日常生活中,我們用“人類”這個詞來表述。

       如果看完上面這段話,你還是沒有明白類和例項的關係。大聲讀;“我是一個人,我不是人類,但我屬於人類”。明白了嗎?

       類和例項的關係一般都可以套用“[例項]是一種/一個[類]”或者“[例項]屬於[類]”例如:鍵盤是一種輸入裝置,螢幕是一種輸出裝置。

1.3屬性和方法

      屬性嘛,就一句話“某一類實體所共有的特徵的抽象”

      方法,面向物件不像面向過程語言那樣,把方法獨立出去。面嚮物件語言中方法是屬於類的,是一類實體所能實現的功能的抽象描述。例如輸入裝置可以進行輸入,輸出裝置可以進行輸出。

2.封裝!不該看到你別看

2.1封裝的定義

      封裝是面向物件一個顯著特點之一。封裝指的是將一些不必要的成員變數和方法封裝在類的內部(只有本類自己可以使用)在外部操作的時候使用類提供的指定方法(public 關鍵字修飾的方法),這些方法叫做類的介面。

2.2訪問許可權控制

     在java中訪問許可權控制其實說白了就是幾個關鍵字如何使用,不同的關鍵字修飾的變數或者方法,訪問許可權是不相同的。這些關鍵字有private

protectedpublic,還有一個就是毛都不寫的預設

     private:私有的,用private修飾的資料成員和方法只能在當前類中所呼叫。類外看不夠到private修飾的任何成員。

     protected保護的,用protected修飾的成員可以被同一個包中的其他類訪問,也可以被當前類的子類訪問。如果子類不在同一個包中,也是可以訪問的。

     public公共的,用public修飾的成員可以被所有的類訪問。

預設,預設許可權的情況下,被修飾的成員可以被同一個包中的類訪問,而不同包即便是子類,也不可以訪問。

2.3屬性的封裝

一句話,全部屬性定義成private,通過getter/setter來設定其讀寫,只寫,只讀許可權。

2.4方法的封裝

同樣使用關鍵字進行描述,訪問許可權同屬性的封裝。

2.5建構函式 

也叫做構造器,是類成員中一個特殊方法。方法名和類名完全相同,方法沒有返回值型別。

如果我們自己不寫建構函式的話,JAVA編譯器會自動為我們的程式加上一個預設的建構函式,這個建構函式的方法體是空的。

一般情況下構造器中都是進行一些初始化的操作,當我們使用new關鍵字來建立類的物件時,自動回撥用構造器。所以呢!構造器還是寫出來好,別等著編譯器給我們加上了,因為幾乎每個類都要進行初始化的,不是麼?以後介紹設計模式的文章中,“單例模式”也是是利用了預設建構函式的訪問許可權來進行限定的~到時候再講。

3.方法的過載和重寫  都是重字輩的,區別大大滴,思密達~

3.1方法的過載

方法的過載指的是不同的方法是用相同的方法名,但是不同的方法引數是不同的。舉例,當我們求周長的時候可能不同的圖形是用的方法是不同的。圓形的周長是2*PI*R,我們設計的方法calc()可能是隻有一個引數R半徑。而當我們求矩形的時候我們設計函式calc()就可能會有2個引數寬和長。

PS:由於JAVA的型別自動轉換機制,我們在設計過載方法的時候一定要考慮好引數的型別。比如func(int,double)和func(double,int)這兩個就有可能出現問題。如果我們呼叫的時候為func(2,3);這是Eclipse會提示The method func(double, int) is ambiguous。這是因為Java自動型別轉換在執行的時候小得想大的轉換,整型向實型轉靠攏 所以2和3都可以轉換成double型,編譯器就傻了,用哪個方法呢?

3.2過載構造器

既然構造器也是一種方法,那麼他必須可以被過載。不過既然他又是特殊的方法,過載的時候也有點特別的地方。

多個構造器過載方法存在的時候,在構造器中呼叫過載構造器不能使用方法名(同類名),必須使用關鍵字this,並且呼叫過載構造器的語句必須是構造器方法的第一行。這個可以參加我的例子。

3.4繼承和重寫(重寫的概念應該由繼承引出來,所以這兩個概念放到一起講了)

面向物件的又一個重要概念,繼承~顧名思義就是從另外一個類中繼承一些東西為己所用。這是面向物件程式設計的一個突出優點,程式碼實現了複用。PS:當然面向過程也是可以複用的,Ctrl+C Ctrl+V

在JAVA中子類再定義的時候使用extends關鍵字來表明父類。

在初始化子類的時候會呼叫父類的構造器,預設是呼叫不帶任何引數的父類的構造器,如果想要呼叫其他構造器,要使用super關鍵字。

伴隨著繼承而來的就是重寫了,子類可以通過重寫來改變從父類繼承得到的方法,重寫可以改變方法的返回值和訪問許可權。子類中重寫的方法必須保持父類原有的方法的許可權或者比其更進一步擴大訪問許可權。重寫方法的返回值型別必須是原方法的返回值型別的子類。

4.多型、抽象類和介面

to be continue