關於面向對象

面向對象

問題

  • 面向對象的好處
  • 學一門技術是否須要趣味性、通俗性的指導

面向對象

什麼是對象

  世間任何事物均可以定義爲對象。java

什麼是類

  類就是把對象的公共屬性和方法抽離出來造成集合的抽象,也就是說,類是一種抽象,用來描述對象特徵的抽象。編程

什麼是實例

  實例就是對象,就比如咱們,就是人這種抽象的一個實例。函數

什麼是構造方法

  從字面上來看,構造方法是用來構造對象,當對象正在建立時,會經過構造方法對對象進行初始化。
構造方法的特徵:學習

  • 與類同名
  • 無返回值
  • 未定義時,會建立一個默認構造方法

什麼是方法重載

  方法重載就是同一個方法,在使用的時候可以根據你參數的類型,從而表現出不一樣的行爲ui

public class person { public void eat(){ System.out.println("沒東西能夠給我吃"); } public void eat(Fruit fruit){ System.out.println("我正在吃水果"); } ... }

方法重載提供了函數可擴展的能力,使用時僅需:spa

  • 方法名相同
  • 參數類型或參數個數不一樣

面向對象三大特性

封裝

優勢:設計

  • 鬆耦合
  • 隱藏類的內部實現
  • 對外部只暴露必要的接口,避免使用者使用非法的操做來改變類對象的內部結構

  一般,咱們在設計一個功能時,老是會把與該功能相似的全部屬性和行爲都封裝在一個類中,這樣就能夠避免功能內部的行爲與別的類產生依賴性,別人使用你的功能時,僅僅須要知道如何調用你的接口來獲取想要的信息,不須要理會內部實現究竟是怎麼作。
  對於類的內部,通常開發者只提供必要的接口來訪問它的內部屬性,不會容許你直接操做它的內部,這樣作有利於保證使用者是按照設計者的設計邏輯控制使用,避免由於非法使用而致使錯誤的發生。對象

繼承

特色:繼承

  • 子類擁有父類非 private 的屬性和方法
  • 子類具備本身的屬性和方法,能夠擴展新的行爲
  • 子類還能夠重寫從父類的行爲

優勢接口

  • 實現代碼複用
  • 方便設計嚴密的類登記結構體系(樹狀)

  對象的繼承是一種 'is-a' 的關係,若是兩個對象 A 和 B ,能夠描述爲 ‘B 是 A’,則代表 B 能夠繼承 A。
  繼承關係不能簡單地理解爲父親和兒子的關係,繼承關係其實是一種特殊關係,就比如貓和哺乳動物,貓是哺乳動物的一種特殊抽象,由於它除了具有哺乳動物的特性外,還具有本身獨有的個性;好比它會抓老鼠、抓魚,這些並非哺乳動物的共同特性。
  固然,在設計類的時候,千萬不要爲了繼承而繼承,過多的使用繼承會使得整個類層次結構變得十分複雜,使得類與類之間的耦合性變強,因此在使用繼承的時候千萬要理清對象與對象之間的關係;在沒有必要選擇繼承的狀況下推薦使用組裝。
  固然是否要使用繼承,這也得看具體狀況,當兩個類擁有 ‘is-a’ 的關係,可使用繼承;當兩個類擁有 'has-a' 的關係,可使用組裝。

多態

  多態也叫動態綁定,便是系統在運行時會根據對象的運行時類型,從而表現出不一樣的行爲
特色:

  • 子類以父類的身份出現
  • 子類在工做時以本身的方式去實現
  • 子類以父類的身份出現時,特有的屬性和行爲不可使用

  與動態綁定相對的則是靜態綁定,C語言編程採用的就是靜態綁定。靜態綁定是在 編譯期進行,也就是說,你的程序在編譯的時候,他已經對各個方法的調用的地址已經作了綁定,因此在運行的時候,程序會直接根據你的方法地址去調用具體的方法。
  而向面向對象編程多態採用的則是動態綁定,那麼動態綁定他究竟是如何作的呢?程序運行的時候又是如何肯定它的運行時類型從而調用對應的方法的呢?
  以後再詳解。

抽象類

特色:

  • 抽象類不能實例化
  • 抽象方法是必須被子類重寫的方法
  • 若是類中包含抽象方法,那個該類必需要被定義爲抽象類

      抽象類一般表明一個抽象概念,它提供一個繼承的出發點,當設計一個新的抽象類時,必定是要用來繼承的,因此,在一個以繼承關係造成的等級結構裏面,樹葉節點應當是具體類,而樹枝節點應當是抽象類

接口

特色:

  • 接口不能實例化
  • 字段默認都是public static final 類型
  • 只能定義抽象方法

接口和抽象類的區別

  對於初學者來講,不少人在學習的時候,確定都會有這麼一個疑問,接口和抽象類的區別究竟是什麼,咱們在設計程序的時候,何時應該用抽象類,何時用接口呢?

那麼先來講說這二者的使用特色的區別:

  • 抽象類能夠定義抽象方法,也能夠定義基本方法(即本身方法給方法作出實現),而接口只能定義抽象方法
  • 一個類只能繼承一個抽象類,但可實現多個接口
  • 子類能夠選擇只實現部分抽象類的成員(這樣子類也是一個抽象類),但必須對接口全部成員進行實現

那麼如今就來講說它們在設計思想上的區別:

  • 類是對對象的抽象;抽象類是對類的抽象;接口是對行爲的抽象
  • 若是行爲跨越不一樣類型的對象(例如飛機、鳥,不是同一類對象,但都有飛行這種行爲),可考慮使用接口;若是是對於一些類似的對象(例如貓、狗都屬於動物),則考慮抽象出抽象類,讓其繼承
  • 從設計角度講,抽象類是對子類公共部分的抽象,而接口根本不知子類的存在,而是預先定義了一套行爲

  也就是說,不管是接口、抽象類、類甚至對象,都是在不一樣層次、不一樣角度進行抽象的結果,它們的共性就是抽象。一般抽象類是對目前一類存在共性的子類的一種泛化,經過抽離出子類間的共同屬性和行爲,從而進行抽象的一種泛化;而接口則是預先定義了一套有關聯的行爲,至於誰會實現這套行爲,開發者自行決定,而我要作的只是告訴接口的實現類你擁有哪些行爲而已。

相關文章
相關標籤/搜索