編程體系結構(06):Java面向對象

本文源碼:GitHub·點這裏 || GitEE·點這裏java

1、基礎概念

一、面向對象概念git

面向對象編程的主要思想是把構成問題的各個事務分解成各個對象,創建對象的目的不是爲了完成一個步驟,而是爲了描敘一個事物在整個解決問題的步驟中的行爲。github

二、類和對象面試

對象:真實存在惟一的事物;在應用程序中對象是數據和動做的結合體,不只可以進行操做,同時還可以記錄下操做結果。算法

類:抽象的概念,實際就是對某種類型事物的共性屬性與行爲的抽取;例如User[名稱.年齡.性別]類用來描述用戶的基礎信息。spring

Java開發中如何理解面向對象:構建合適的對象接口API體系,建立合適的對象,解決合適的問題,例如JDK的API已經定義好的類,經過這些類建立對象直接使用;經過自定義類來建立對象使用,在MVC中模式中,不一樣業務功能建立不一樣的接口和類系統。數據庫

三、屬性和方法編程

類中變量設計模式

位置區別:安全

  • 成員變量是定義在方法以外,類內;
  • 局部變量是定義在方法以內。

做用區別:

  • 成員變量的做用是用於描述一類事物的公共屬性的。
  • 局部變量的做用就是提供一個變量給方法內部使用而已。

初始值區別:

  • 成員變量是有默認的初始值。
  • 局部變量是沒有默認的初始值的,必需要先初始化才能使用。

生命週期:

  • 隨着對象的建立而存在,隨着對象的消失而消失。
  • 局部變量在調用了對應的方法時執行到了建立該變量的語句時存在,局部變量一旦出了本身的做用域那麼立刻從內存中消失。

類中方法

對一個類功能的具體描述,多是類方法或者對象方法;

  • 類方法,又叫靜態方法,使用類直接調用,經常使用工具類;
  • 對象方法,又叫實例方法,使用類對象調用,常見API方法;

構造方法

構造函數的做用是用來給對應的對象進行初始化處理,沒有返回值類型的,構造函數的函數名必需要與類名一致,若是一個類沒有顯式的聲明一個構造方法,那麼java編譯器會爲該類添加一個無參的構造函數的,若是一個類已經顯式的寫上一個構造方法時,那麼java編譯器則不會再爲該類添加一個無參的構造方法,構造函數是能夠在一個類中以重載的形式存在多個。

四、接口

接口是一個特殊的類,接口的成員變量默認的修飾符爲:public-static-final,接口中的方法都是抽象的方法,默認的修飾符:public-abstract,接口不能建立對象且沒有構造方法的,接口是給類去實現時使用的,非抽象類實現接口,必需要把接口中全部方法所有實現。

接口的做用:程序的解耦,定義實現類的約束規範,若是須要拓展特別功能,也能夠基於接口形式實現。

類與接口之間關係:多實現關係;接口與接口之間關係:多繼承關係。

五、重載與重寫

方法重寫

父類的功能沒法知足子類的需求時,能夠進行方法的重寫即子父類使用同名的函數,且子類重寫的方法使用@Override註解,這裏存在繼承的關係。

  • 方法名與形參列表必須一致;
  • 子類的權限修飾符必需要大於或者等於父類的權限修飾符;
  • 子類的返回值類型必需要小於或者等於父類的返回值類型;
  • 子類拋出的異常類型要小於或者等於父類拋出的異常類型;

方法重載

在一個類中存在兩個或者兩個以上的同名函數,稱做爲方法重載,函數名要一致,形參列表不一致(形參的個數或形參的類型不一致)。

六、包與權限

權限修飾符

權限修飾符就是控制被修飾的成員的範圍可見性,分爲:public、private、protected、default(沒有修飾)。在不一樣包下面只有public 與 protected 能夠訪問,並且protected必須是在繼承關係下才可以訪問。

包package

包能夠理解爲計算機系統中的文件夾,用來解決類名重複產生衝突的問題,包名所有小寫,語句必須位於java文件中中第一個語句。

2、基本特徵

封裝

把類中內部的實現細節進行隱藏,只暴露對外的接口,例如實際開發場景中通常實體類的全部成員屬性(成員變量)都要封裝起來,能夠被認爲是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問,適當的封裝可讓程序代碼更容易理解與維護,增強安全性。

繼承

在現有父類的基礎上在從新構建一個新類即子類,經過子類對象能夠訪問父類非私有的成員變量和成員方法,以及重寫父類中的非私有成員方法,繼承的做用就是能提升代碼的複用性。

多態

多態指一個對象能夠具有多種形態,例如:父類的引用類型變量指向了子類的對象;接口的引用類型變量指向了接口實現類的對象;這種狀況是存在於繼承或者實現關係中,多態狀況下,子父類存在同名的成員變量時,訪問的都是父類的成員,除了在同名非靜態函數時纔是訪問子類的。

3、經常使用關鍵字

一、This關鍵字

this關鍵字表明瞭所屬函數的調用者對象,若是存在同名成員變量與局部變量時,在方法內部默認是訪問局部變量的數據,能夠經過this關鍵字指定訪問成員變量的數據,在一個構造函數中能夠調用另一個構造函數初始化對象。

二、Static關鍵字

static修飾成員變量:若是有數據須要被共享給全部對象使用時,那麼就可使用static修飾。

static修飾成員函數:該靜態方法不依賴於任何對象就能夠進行訪問,非靜態成員方法/變量都必須依賴具體的對象纔可以被調用。

static修飾代碼塊:static關鍵字用來包裝靜態代碼塊以提高程序性能,靜態代碼塊能夠置於類中的任何地方,在類初次被加載的時候,會依次執行一次每一個靜態代碼塊。

三、Super關鍵字

super關鍵字表明瞭父類空間的引用,子父類存在着同名的成員時,在子類中默認是訪問子類的成員,能夠經過super關鍵字指定訪問父類的成員;建立子類對象時,默認會先調用父類無參的構造方法,能夠經過super關鍵字指定調用父類的構造方法。

四、Instanceof關鍵字

instanceof關鍵字的做用:判斷一個對象是否屬於指定的類別,對象與指定的類別必需要存在繼承或者實現的關係。在強制類型轉換以前一般會使用該關鍵字先判斷,而後在進行轉換。

五、Final關鍵字

final修飾類:代表該類不能被繼承,final類中的成員變量能夠根據須要設爲final,可是要注意final類中的全部成員方法都會被隱式地指定爲final方法。

final修飾方法:鎖定方法防止任何繼承類修改它的含義;第二個緣由是效率,父類的final方法是不能被子類所覆蓋的。

final修飾變量:成員變量被標識爲常量,只能被賦值一次,賦值後值再也不改變,當函數的參數類型聲明爲final時,說明該參數是隻讀型的。

六、Abstract關鍵字

abstract修飾類:該抽象類不能被實例化,抽象類與接口的不一樣之處,接口中不能有實例方法去實現業務邏輯,而抽象類中能夠有實例方法,並實現業務邏輯,抽象類不能使用final關鍵字修飾,由於final修飾的類是沒法被繼承,而對於抽象類來講就是須要經過繼承去實現抽象方法。

abstract修飾方法:抽象方法沒有方法主體,與接口方法有點相似,抽象方法不能用private修飾,由於抽象方法必須被子類實現,抽象方法也不能用static修飾,抽象類.抽象方法這樣的操做沒有意義。

4、場景分析

一、設計模式

面向對象與設計模式是以前幾年很火熱的概念,面試時必問的問題,在編程中想用好設計模式,前提理解面向對象機制,都是對問題的高度向上抽象封裝,向下逐層解決實現,提升代碼的複用性、可讀性、靈活性、可維護性強,最主要是格調高。

二、IO流體系

若是想理解面向對象和設計模式的代碼,在Java中能夠重點讀讀IO流體系的API,頂級接口,向下實現,包裝類,擴展類,是真的把這兩大理念用到極致了,固然IO流最爲文件處理的核心,也值得讀讀源碼。

三、MVC開發模式

在MVC的開發模式中,業務層接口,業務層實現;數據庫接口,數據訪問實現,也是面向對象的最基礎用法接口與接口的實現類。

5、源代碼地址

GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile

推薦閱讀:編程體系整理

序號 項目名稱 GitHub地址 GitEE地址 推薦指數
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·點這裏 ☆☆☆☆☆
相關文章
相關標籤/搜索