天天看點

程式設計體系結構(06):Java面向對象一、基礎概念二、基本特征三、常用關鍵字四、場景分析五、源代碼位址

一、基礎概念

1、面向對象概念

面向對象程式設計的主要思想是把構成問題的各個事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描叙一個事物在整個解決問題的步驟中的行為。

程式設計體系結構(06):Java面向對象一、基礎概念二、基本特征三、常用關鍵字四、場景分析五、源代碼位址

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           

本文源碼:

GitHub·點這裡

||

GitEE·點這裡