1. 程式人生 > 其它 >java—面向物件-抽象類

java—面向物件-抽象類

1.類與物件的關係

  • 類是一種抽象的資料型別,它是對某一類事物整體描述/定義,但並不能代表某一個具體的事物 

    動物 植物 手機 電腦……

    Person類 Pet類 Car類 這些類都是用來描述/定義某一類具體的事物應該具備的特點和行為

  • 物件是抽象概念的具體例項

    張三就是一個人的具體例項

    能夠體現出特點,展現出功能的具體例項,而不是一個抽象的概念

2.建立及初始化物件

  • 使用new關鍵字建立物件
  • 使用new關鍵字建立的時候,除了分配記憶體空間之外,還會給建立好的物件進行預設的初始化以及對類中構造器的呼叫。
  • 類中的構造器也稱為構造方法,是在進行建立物件的時候必須要呼叫的,並且構造器有以下兩個特點

    1.必須和類的名字相同

    2.必須沒有返回型別 也不能寫void

    *.定義有參構造後,如果想使用無參構造,需要顯示定義一個無參的構造

  • 構造器必須掌握

3.封裝

  • 該露的露 該藏的藏

    我們程式設計要求"高內聚,低耦合"。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用。

  • 封裝(資料隱藏)

    通常,應該禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏。

  • 記住一句話:屬性私有:get/set

  • 優點:

    1.提高程式的安全性,保護資料

    2.隱藏程式碼的實現細節

    3.統一介面

    4.系統可維護增加了

4.繼承

  • 繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模
  • "extends"的意思是擴充套件,子類是父類的擴充套件
  • JAVA中類只有單繼承,沒有多繼承!
  • 繼承是類和類之間的一種關係,除此之外,類和類之間關係還有依賴,組合,聚合等。
  • 繼承關係的兩個類,一個為子類(派生類),一個為父類(基類)。子類繼承父類,用關鍵字extends來表示。
  • 子類和父類之間,從意義上講應該具有"is a"的關係。
  • object類:在java中,所有的類都預設直接或者間接繼承object。
  • super注意點:
  1. super呼叫父類的構造方法,必須在構造方法的第一個
  2. super只能出現在子類的方法或者構造方法中!
  3. super和this不能同時呼叫構造方法

  • 方法重寫:需要有繼承關係,子類重寫了父類的方法!
  1. 方法名必須相同
  2. 引數列表必須相同
  3. 修飾符:範圍可以擴大但不能縮小:public>protected>default>private
  4. 丟擲異常:範圍可以被縮小,但不能被擴大
  • 重寫的原因:
  1. 父類的功能子類不一定需要,或者不一定滿足 //alter+insert override重寫方法

5.多型

  • 即同一方法可以根據傳送物件的不同而採用多種不同的行為方式
  • 一個物件的實際型別是確定的,但可以指向物件的引用型別有很多(父類 有關係的類)
  • 多型存在的條件
  1. 有繼承關係
  2. 子類重寫父類的方法
  3. 父類的引用指向子類的物件
  • 注意:多型是方法的多型 屬性沒有多型性
  • instance of:它的作用是判斷其左邊物件是否為其右邊類的例項,返回boolean型別的資料 //x intance of y 判斷x與y是否有父子關係

抽象類

  • abstract修飾符可以用來修飾方法也可以修飾類,如果修飾方法,那麼該方法就是抽象方法,如果修飾類,那麼該類就是抽象類。
  • 抽象類中可以沒有抽象方法,但是有抽象方法的類一定要宣告抽象類。
  • 抽象類,不能使用new關鍵字來建立物件,它是用來讓子類繼承的。
  • 抽象方法只有方法的宣告,沒有方法的實現,它是用來讓子類實現的。
  • 子類繼承抽象類,那麼就必須要實現抽象類沒有實現的抽象方法,否則該子類也要宣告為抽象類。

介面

  • 普通類:只有具體實現
  • 抽象類:具體實現和規範(抽象方法)都有!
  • 介面:只有規範!
  • 介面就是規範,定義的是一組規則,體現了顯示世界中“如果你是……則必須能……”的思想,如果你是汽車,則必須能跑。
  • 介面本質是契約,就像法律一樣,制定好後大家共同遵守
  • oo的精髓,是對物件的抽象,能體現這一點的就是介面。為什麼我們討論設計模式都是針對具備了抽象能力的語言(比如c++,c#,java等),就是因為設計模式所研究的,實際上就是如何合理的去抽象
  • 宣告類的關鍵字是class,宣告介面的關鍵字是interface。

內部類

  • 內部類就是在一個類的內部在定義一個類,比如,A類中定義了一個B類,那麼B類相對於A類來說就是內部類,而A類相對於B類來說就是外部類。