1. 程式人生 > >7 面向對象的三大特征

7 面向對象的三大特征

創建 訪問權限控制 類繼承 spa 取值 字符串表 默認 高程 之間

面向對象的三大特征為:封裝、繼承、多態。

1 封裝(encapsulation)

1.1 廣義上的封裝就是包裝,可以將方法看作是對為完成特定功能的代碼的封裝,可以把類看作對屬性和方法的封裝....

  狹義上的封裝:將屬性私有化,然後提供公有的gettersetter方法以供訪問。

  封裝的優點:

  1)隱藏了實現細節,簡化開發

   2)安全

   3)提高了代碼的可維護性和可擴展性。

  步驟:

  1)將屬性私有化,將修飾符修改private

  2)提供公有的訪問方法:getter方法:取值,setter方法:賦值

   3)添加訪問權限控制

1.2 四種修飾符

  public: 項目下所有的類都能使用

  protected: 本類,同包下的其他類或其他包下子類

  默認的(default/friendly): 本類中訪問、同包下其他類訪問

  private:只能在本類中訪問

  屬性,方法和構造方法的修飾符:public/protected/默認的/private

  類的修飾符:public/默認的

2 繼承(inheritance)

2.1 繼承代表了一種is-a關系,如果說AB,也就可以說A繼承了B

  父類更加通用、子類更加具體

  優點:提高代碼的復用性。

  java中實現繼承使用extends關鍵字

   [修飾符] class 類名 extends 父類{

  

   }

  子類可以繼承父類的非私有的屬性和方法,不能繼承父類的構造方法。子類無法繼承父類的構造方法,但可以通過super關鍵字進行調用。

  java中繼承是屬於單繼承,一個類只能有一個父類,但是一個父類可以有多個子類。C++中可以存在多繼承,java可以通過接口實現多繼承。

  一旦兩個兩個類建立了繼承關系,子類就可以擁有父類非私有的屬性和方法。

2.2 方法的重寫

  方法的重寫(override):一般發生在父子之間,子類重寫的方法應該滿足以下條件:

   1)子類的方法名,返回值類型,參數列表必須與父類相同

  2)子類的修飾符範圍>=父類的修飾符範圍

  修飾符範圍:public>protected>默認

>private

  註意:一旦子類重寫了父類中的方法,創建子類實例後,調用子類重寫後的方法。

* 重寫(override)和重載(overload)區別:

  1)重寫一般發生在父子之間,重載一般在同一個類中。

  2)重寫要求方法名,返回值類型,參數列表必須與父類相同,並且修飾符範圍大於等於父類方法的修飾符範圍。

    重載方法名相同,參數列表不同,與返回值類型及修飾符無關。

  3)作用不同

   重載主要是為了提供一種同名方法不同參數的能力(可以讓一個類用於多個同名的方法)

   重寫主要是為了結合多態使用,提高程序擴展性和可維護性。

2.3 super關鍵字

  super關鍵字:代表直接父類的引用,類別this關鍵字進行記憶。

  用法:

  1)可以使用super關鍵字訪問父類的屬性: super.屬性名

  2)使用super關鍵字訪問父類的方法:super.方法名()

  3)使用super關鍵字調用父類的構造方法,但是必須作為構造方法的第一行語句存在。

   註意:在靜態方法中不能使用superthis關鍵字。

2.4 Object

  java.lang.Object:所有類的基類

  一個類如果沒有顯式使用extends繼承其他類,這個類繼承了Object類,在任何類的對象中使用Object中的方法

  常用的方法:

  getClass() 返回此 Object 的運行時類。主要用於反射機制。

  toString() 返回該對象的字符串表示。如果使用System.out.println(stu);默認調用stu.toString()

     [email protected]==

     cn.zzsxt.oop6.Student(包名.類名)+@+16進制表示的hashcode

  toString()方法經常在子類中重寫。

2.5 父子類中代碼的執行過程

   靜態代碼塊在使用類時執行。 普通代碼塊在創建對象時執行。

  父類的靜態代碼塊>子類靜態代碼塊>父類的代碼塊>父類的構造方法>子類的代碼塊>子類的構造方法

   在創建子類時,先調用父類的構造方法先創建父類的實例,在創建子類的實例。

2.6 equals==的區別

   ==在比較內容時分為以下兩種情況:

   1)使用==比較基本數據類型,做的值的比較,值相同返回true,否則返回false

   2)使用==比較引用類型,比較不是內容是否相同,而是兩個對象的引用(地址)是否相同,如果指向相同的地址返回true,否則返回false

   equals():比較內容是否相同。

  Object中的equals方法本質比較引用(==),如果需要按照內容進行比較是否相同,就需要重寫Objectequals方法。

3 多態(polymorphism

3.1 生活中的多態:同一種物質,因環境不同而展現不同的形態。比如:水在不同環境下可以展現為固態,液態和氣態。

  程序中的多態:同一種接口因不同的實現而執行不同的操作。

  優點:提高了代碼的擴展性和可維護性。

  多態在java中實現的前提: 1.繼承 2.方法的重寫 3.父類引用指向子類

  多態在java中實現的步驟。

  1)建立繼承關系

  2)在編譯時將父類作為形參(範圍大一點,模糊一點)

  3)在運行時將子類對象作為實參,執行的子類重寫後的方法。

3.2 類型轉換

  1)子類轉換為父類--->自動轉化 (向上轉型)

   a.子類向上轉型成父類,上轉型對象不能操作子類新增的成員變量和方法。

   b.上轉型對象可以操作子類繼承或重寫的成員變量和方法

   c.如果子類重寫了父類的某個方法,上轉型對象調用該方法時,是調用的重寫方法。

   2)父類轉換為子類:強制轉換(向下轉型)

3.3 instanceof運算符

  作用:判斷對象是否為指定類型的實例。如果是指定類型的實例返回值為true,否則返回false

  防止在類型轉換時出現ClassCastException異常。

   語法: 對象 instanceof 類型

   if(a instanceof Cat){

     Cat c=(Cat)a;

   }

7 面向對象的三大特征