Java之面向對象

面向對象的特徵有什麼?

如果,當人家問到你,這個問題時,我們可以先引申出類的概念因爲對象是類的一個實例。
點擊查看類的詳情

後面再去引出面向對象的三大特徵:

  • 封裝
  • 繼承
  • 多態

封裝是什麼?

封裝是面嚮對象語言的精髓。

簡單來講封裝就是,把一些屬性和方法封裝起來,形成一個實體類(JavaBean)或者一個接口(Interface)【可以是方法接口】。

類的屬性,一般是私有的。
類的方法,該公開的公開,該私有的私有。
方法,封裝了實現的過程,接口是參數和返回值。

舉例:1)get/set 方法;對某一個屬性只提供get不提供set方法,就是隻讀的,在類的外部不能修改;2)提供統一的參數檢查,在set上給與檢查,判斷合法性和安全性;將屬性都私有,並且提供set/get 方法,做成了通用的組件,叫JavaBean;

eg:  貓具有如下特性:  可愛,高冷,活潑愛動  那麼,我們可以將其封裝成一個實體類Cat

public class Cat {
    private String id;
    private String lovely;
    private String lively;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLovely() {
        return lovely;
    }

    public void setLovely(String lovely) {
        this.lovely = lovely;
    }

    public String getLively() {
        return lively;
    }

    public void setLively(String lively) {
        this.lively = lively;
    }
}

那麼,接口,方法實例來一個。單純表示一個接口方法,至於裏面的實現類並不打算完善

修改:
@RequestMapping("/")   //裏面是路徑  url
Integer addOrEdit(@RequestParam("id") String id);//此註解,表示,拿到url上的屬性值

繼承

面向對象的主要功能

繼承是一種構建新類的方式,他是基於已有的類的定義爲基礎,構建新的類,已有的類稱爲父類,新構建的類稱爲子類,子類能調用父類的非private修飾的成員,同時還可以自己添加一些新的成員,擴充父類,甚至重寫父類已有的方法,更其表現符合子類的特徵。讓子類的表現更獨特,更專業。

注意: 子類不能獲得父類中使用privade修飾的成員。以及不可獲得父類的構造器。

打個比喻的話~~那就是,你可以從你父親那邊繼承得到金錢或其它。但你決不能獲得你父親的身體 咳咳咳。

多態

從一定角度來看的話,上面的封裝以及繼承都是爲了多態而準備的。

多態可分爲兩種:

  • 編譯時的多態:其實就是方法的重載。
  • 運行時的多態:Java運行時,系統根據調用該方法的實例的類型來決定,選擇調用哪個方法。 (其實,我們平時所說的多態大部分便是運行時的多態)

注意:

因爲說了,封裝以及繼承從一定角度來看,就是爲了多態而準備的。

  • 一定存在繼承關係。
  • 對父類的方法進行了重寫。(重寫是必須存在繼承的,所以有第一點)。
  • 調用方法的時候,形參爲父類調用。

點擊此處,查看重載(Overload)以及重寫(Override)

說了這麼多,那麼,多態到底是什麼呢?

簡單來講,多態是同一個行爲具有多個不同表現形式或形態的能力。多態性是對象多種表現形式的體現。
eg:我們在WPS編輯文檔時,F12是保存文檔,但是對於開發人員來講在瀏覽器中F12就是開發工具了,尤其是前端開發人員。可,查看網絡請求,審查元素等等。

抽象

除上之外,抽象也是一個重要的特徵,抽象就是忽略與當前目標無關的相關方面,以便更充分地突出與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,二是數據抽象。

多態的實現機制是什麼?

Java允許父類或接口定義的引用變量指向子類或具體實現類的實例對象,而程序調用的方法在運行時才動態綁定,就是引用變量所指向的具體實例對象的方法,也就是內存里正在運行的那個對象的方法,而不是引用變量的類型中定義的方法。
正是由於這種機制,兩個相同類型的變量,但由於它們實際引用了不同的方法,所以結果也不同

嘻嘻嘻~是不是有點暈? 表示博主真正的去讀的時候也是這樣,腦殼痛腦殼痛~~
OK,舉個簡單的例子:
多態實現機制的例子圖
就是說,可能多個實例,調用同一方法,那麼,它是怎麼知道該調用那個方法呢?
很簡單,是通過具體的實例調用的,而不是引用變量類型中的定義的方法來運行(如上圖例子:調用Chinese c = new Chinese(); c.eat(); 執行出結果是用筷子吃飯。【不是根據引用變量類型中的定義的方法運行,是指不是看左邊的 Chinese c 的引用變量,而是看右邊的具體事例去調用方法,如果把右邊的換成new Indian() ;那麼調用eat();方法運行的結果又是不同 】
)。【所謂引用變量(如: China C = new China 引用變量是C 而 引用變量類型是China)】

看完之後,是不是有點理解了~~~機智如你,對吧

最後,來個多態例子:

多態例圖
多態例圖2

結果
結果圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章