從今天開始有計劃的寫一些博文。內容主要涉及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,protected,public,還有一個就是毛都不寫的預設。
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