世間任何事物均可以定義爲對象。java
類就是把對象的公共屬性和方法抽離出來造成集合的抽象,也就是說,類是一種抽象,用來描述對象特徵的抽象。編程
實例就是對象,就比如咱們,就是人這種抽象的一個實例。函數
從字面上來看,構造方法是用來構造對象,當對象正在建立時,會經過構造方法對對象進行初始化。
構造方法的特徵:學習
方法重載就是同一個方法,在使用的時候可以根據你參數的類型,從而表現出不一樣的行爲ui
public class person { public void eat(){ System.out.println("沒東西能夠給我吃"); } public void eat(Fruit fruit){ System.out.println("我正在吃水果"); } ... }
方法重載提供了函數可擴展的能力,使用時僅需:spa
優勢:設計
一般,咱們在設計一個功能時,老是會把與該功能相似的全部屬性和行爲都封裝在一個類中,這樣就能夠避免功能內部的行爲與別的類產生依賴性,別人使用你的功能時,僅僅須要知道如何調用你的接口來獲取想要的信息,不須要理會內部實現究竟是怎麼作。
對於類的內部,通常開發者只提供必要的接口來訪問它的內部屬性,不會容許你直接操做它的內部,這樣作有利於保證使用者是按照設計者的設計邏輯控制使用,避免由於非法使用而致使錯誤的發生。對象
特色:繼承
優勢接口
對象的繼承是一種 'is-a' 的關係,若是兩個對象 A 和 B ,能夠描述爲 ‘B 是 A’,則代表 B 能夠繼承 A。
繼承關係不能簡單地理解爲父親和兒子的關係,繼承關係其實是一種特殊關係,就比如貓和哺乳動物,貓是哺乳動物的一種特殊抽象,由於它除了具有哺乳動物的特性外,還具有本身獨有的個性;好比它會抓老鼠、抓魚,這些並非哺乳動物的共同特性。
固然,在設計類的時候,千萬不要爲了繼承而繼承,過多的使用繼承會使得整個類層次結構變得十分複雜,使得類與類之間的耦合性變強,因此在使用繼承的時候千萬要理清對象與對象之間的關係;在沒有必要選擇繼承的狀況下推薦使用組裝。
固然是否要使用繼承,這也得看具體狀況,當兩個類擁有 ‘is-a’ 的關係,可使用繼承;當兩個類擁有 'has-a' 的關係,可使用組裝。
多態也叫動態綁定,便是系統在運行時會根據對象的運行時類型,從而表現出不一樣的行爲
特色:
與動態綁定相對的則是靜態綁定,C語言編程採用的就是靜態綁定。靜態綁定是在 編譯期進行,也就是說,你的程序在編譯的時候,他已經對各個方法的調用的地址已經作了綁定,因此在運行的時候,程序會直接根據你的方法地址去調用具體的方法。
而向面向對象編程多態採用的則是動態綁定,那麼動態綁定他究竟是如何作的呢?程序運行的時候又是如何肯定它的運行時類型從而調用對應的方法的呢?
以後再詳解。
特色:
若是類中包含抽象方法,那個該類必需要被定義爲抽象類
抽象類一般表明一個抽象概念,它提供一個繼承的出發點,當設計一個新的抽象類時,必定是要用來繼承的,因此,在一個以繼承關係造成的等級結構裏面,樹葉節點應當是具體類,而樹枝節點應當是抽象類
特色:
對於初學者來講,不少人在學習的時候,確定都會有這麼一個疑問,接口和抽象類的區別究竟是什麼,咱們在設計程序的時候,何時應該用抽象類,何時用接口呢?
那麼先來講說這二者的使用特色的區別:
那麼如今就來講說它們在設計思想上的區別:
也就是說,不管是接口、抽象類、類甚至對象,都是在不一樣層次、不一樣角度進行抽象的結果,它們的共性就是抽象。一般抽象類是對目前一類存在共性的子類的一種泛化,經過抽離出子類間的共同屬性和行爲,從而進行抽象的一種泛化;而接口則是預先定義了一套有關聯的行爲,至於誰會實現這套行爲,開發者自行決定,而我要作的只是告訴接口的實現類你擁有哪些行爲而已。