编程体系结构(06):Java面向对象
本文源碼:GitHub·點這里 || GitEE·點這里
一、基礎概念
1、面向對象概念
面向對象編程的主要思想是把構成問題的各個事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘一個事物在整個解決問題的步驟中的行為。
2、類和對象
對象:真實存在唯一的事物;在應用程序中對象是數據和動作的結合體,不僅能夠進行操作,同時還能夠記錄下操作結果。
類:抽象的概念,實際就是對某種類型事物的共性屬性與行為的抽取;例如User[名稱.年齡.性別]類用來描述用戶的基礎信息。
Java開發中如何理解面向對象:構建合適的對象接口API體系,創建合適的對象,解決合適的問題,例如JDK的API已經定義好的類,通過這些類創建對象直接使用;通過自定義類來創建對象使用,在MVC中模式中,不同業務功能創建不同的接口和類系統。
3、屬性和方法
類中變量
位置區別:
- 成員變量是定義在方法之外,類內;
- 局部變量是定義在方法之內。
作用區別:
- 成員變量的作用是用于描述一類事物的公共屬性的。
- 局部變量的作用就是提供一個變量給方法內部使用而已。
初始值區別:
- 成員變量是有默認的初始值。
- 局部變量是沒有默認的初始值的,必須要先初始化才能使用。
生命周期:
- 隨著對象的創建而存在,隨著對象的消失而消失。
- 局部變量在調用了對應的方法時執行到了創建該變量的語句時存在,局部變量一旦出了自己的作用域那么馬上從內存中消失。
類中方法
對一個類功能的具體描述,可能是類方法或者對象方法;
- 類方法,又叫靜態方法,使用類直接調用,常用工具類;
- 對象方法,又叫實例方法,使用類對象調用,常見API方法;
構造方法
構造函數的作用是用來給對應的對象進行初始化處理,沒有返回值類型的,構造函數的函數名必須要與類名一致,如果一個類沒有顯式的聲明一個構造方法,那么java編譯器會為該類添加一個無參的構造函數的,如果一個類已經顯式的寫上一個構造方法時,那么java編譯器則不會再為該類添加一個無參的構造方法,構造函數是可以在一個類中以重載的形式存在多個。
4、接口
接口是一個特殊的類,接口的成員變量默認的修飾符為:public-static-final,接口中的方法都是抽象的方法,默認的修飾符:public-abstract,接口不能創建對象且沒有構造方法的,接口是給類去實現時使用的,非抽象類實現接口,必須要把接口中所有方法全部實現。
接口的作用:程序的解耦,定義實現類的約束規范,如果需要拓展特別功能,也可以基于接口形式實現。
類與接口之間關系:多實現關系;接口與接口之間關系:多繼承關系。
5、重載與重寫
方法重寫
父類的功能無法滿足子類的需求時,可以進行方法的重寫即子父類使用同名的函數,且子類重寫的方法使用@Override注解,這里存在繼承的關系。
- 方法名與形參列表必須一致;
- 子類的權限修飾符必須要大于或者等于父類的權限修飾符;
- 子類的返回值類型必須要小于或者等于父類的返回值類型;
- 子類拋出的異常類型要小于或者等于父類拋出的異常類型;
方法重載
在一個類中存在兩個或者兩個以上的同名函數,稱作為方法重載,函數名要一致,形參列表不一致(形參的個數或形參的類型不一致)。
6、包與權限
權限修飾符
權限修飾符就是控制被修飾的成員的范圍可見性,分為:public、private、protected、default(沒有修飾)。在不同包下面只有public 與 protected 可以訪問,而且protected必須是在繼承關系下才能夠訪問。
包package
包可以理解為計算機系統中的文件夾,用來解決類名重復產生沖突的問題,包名全部小寫,語句必須位于java文件中中第一個語句。
二、基本特征
封裝
把類中內部的實現細節進行隱藏,只暴露對外的接口,例如實際開發場景中一般實體類的所有成員屬性(成員變量)都要封裝起來,可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問,適當的封裝可以讓程序代碼更容易理解與維護,加強安全性。
繼承
在現有父類的基礎上在重新構建一個新類即子類,通過子類對象可以訪問父類非私有的成員變量和成員方法,以及重寫父類中的非私有成員方法,繼承的作用就是能提高代碼的復用性。
多態
多態指一個對象可以具備多種形態,例如:父類的引用類型變量指向了子類的對象;接口的引用類型變量指向了接口實現類的對象;這種情況是存在于繼承或者實現關系中,多態情況下,子父類存在同名的成員變量時,訪問的都是父類的成員,除了在同名非靜態函數時才是訪問子類的。
三、常用關鍵字
1、This關鍵字
this關鍵字代表了所屬函數的調用者對象,如果存在同名成員變量與局部變量時,在方法內部默認是訪問局部變量的數據,可以通過this關鍵字指定訪問成員變量的數據,在一個構造函數中可以調用另外一個構造函數初始化對象。
2、Static關鍵字
static修飾成員變量:如果有數據需要被共享給所有對象使用時,那么就可以使用static修飾。
static修飾成員函數:該靜態方法不依賴于任何對象就可以進行訪問,非靜態成員方法/變量都必須依賴具體的對象才能夠被調用。
static修飾代碼塊:static關鍵字用來包裝靜態代碼塊以提升程序性能,靜態代碼塊可以置于類中的任何地方,在類初次被加載的時候,會依次執行一次每個靜態代碼塊。
3、Super關鍵字
super關鍵字代表了父類空間的引用,子父類存在著同名的成員時,在子類中默認是訪問子類的成員,可以通過super關鍵字指定訪問父類的成員;創建子類對象時,默認會先調用父類無參的構造方法,可以通過super關鍵字指定調用父類的構造方法。
4、Instanceof關鍵字
instanceof關鍵字的作用:判斷一個對象是否屬于指定的類別,對象與指定的類別必須要存在繼承或者實現的關系。在強制類型轉換之前通常會使用該關鍵字先判斷,然后在進行轉換。
5、Final關鍵字
final修飾類:表明該類不能被繼承,final類中的成員變量可以根據需要設為final,但是要注意final類中的所有成員方法都會被隱式地指定為final方法。
final修飾方法:鎖定方法防止任何繼承類修改它的含義;第二個原因是效率,父類的final方法是不能被子類所覆蓋的。
final修飾變量:成員變量被標識為常量,只能被賦值一次,賦值后值不再改變,當函數的參數類型聲明為final時,說明該參數是只讀型的。
6、Abstract關鍵字
abstract修飾類:該抽象類不能被實例化,抽象類與接口的不同之處,接口中不能有實例方法去實現業務邏輯,而抽象類中可以有實例方法,并實現業務邏輯,抽象類不能使用final關鍵字修飾,因為final修飾的類是無法被繼承,而對于抽象類來說就是需要通過繼承去實現抽象方法。
abstract修飾方法:抽象方法沒有方法主體,與接口方法有點類似,抽象方法不能用private修飾,因為抽象方法必須被子類實現,抽象方法也不能用static修飾,抽象類.抽象方法這樣的操作沒有意義。
四、場景分析
1、設計模式
面向對象與設計模式是之前幾年很火熱的概念,面試時必問的問題,在編程中想用好設計模式,前提理解面向對象機制,都是對問題的高度向上抽象封裝,向下逐層解決實現,提高代碼的復用性、可讀性、靈活性、可維護性強,最主要是格調高。
2、IO流體系
如果想理解面向對象和設計模式的代碼,在Java中可以重點讀讀IO流體系的API,頂級接口,向下實現,包裝類,擴展類,是真的把這兩大理念用到極致了,當然IO流最為文件處理的核心,也值得讀讀源碼。
3、MVC開發模式
在MVC的開發模式中,業務層接口,業務層實現;數據庫接口,數據訪問實現,也是面向對象的最基礎用法接口與接口的實現類。
五、源代碼地址
GitHub·地址 https://github.com/cicadasmile GitEE·地址 https://gitee.com/cicadasmile推薦閱讀:編程體系整理
| 01 | Java描述設計模式,算法,數據結構 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 02 | Java基礎、并發、面向對象、Web開發 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 03 | SpringCloud微服務基礎組件案例詳解 | GitHub·點這里 | GitEE·點這里 | ☆☆☆ |
| 04 | SpringCloud微服務架構實戰綜合案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基礎應用入門到進階 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合開發常用中間件 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 07 | 數據管理、分布式、架構設計基礎案例 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
| 08 | 大數據系列、存儲、組件、計算等框架 | GitHub·點這里 | GitEE·點這里 | ☆☆☆☆☆ |
總結
以上是生活随笔為你收集整理的编程体系结构(06):Java面向对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机会只留给有准备的人
- 下一篇: ASP.NET中的Theme和Skin