Java基礎一:抽象+封裝、繼承、多態

  Java是一門面向對象編程的語言,就是常見的OOP(Object-oriented Programming),不止Java,其他的很多編程語言都是使用的OOP這種編程思想。

  抽象:Java提供了抽象機制。抽象就是指程序員把需要解決的問題視爲一個對象,並抽取待解決問題的任何概念化構件(人、貓、狗),並表示爲程序中的對象。這種抽象的過程,把我們需要解決的問題,變得更加形象和簡單。

  另外值得一提的就是面向對象的五個基本特徵:

    1、萬物皆爲對象;

    2、程序是對象的集合,程序之間通過發送消息來告知彼此需要執行的動作;

    3、每個對象都由其他的對象組成;

    4、每個對象都有自己的類型;

    5、類型相同的對象可以接收相同的消息;

Java特徵之一:封裝

  封裝就是把一個對象所擁有的屬性隱藏在自己內部,並且提供接口(在Java編程思想中,每個對象都有一個接口)給其他對象操作。

  封裝的好處就是可以保護對象自己的屬性不被其他對象修改,只能使用,這是其一;另一方面就是使編程變得簡單和清晰,每個對象可以通過封裝擁有自己獨特的屬性並可以和其他對象之間通過接口訪問。

對於自己的內部屬性,在Java中有四個關鍵字對他們的訪問權限作了限制:public、protected、default、private,訪問權限如下圖:

Java特徵之二:繼承

    繼承主要描述了兩個有相似功能(或屬性)的兩個類之間的關係。其中一個類稱爲父類(或者超類、基類),另一個類稱爲子類(或者導出類、繼承類),其中子類可能擁有比父類更多的特徵,可以把子類看成是在父類基礎上的一種拓展。

  繼承的好處就是在創建一個類之後,如果需要一個新類,並且新類與舊類有相似的特徵時,新類可以繼承舊類的原有特徵,而不用自己再次定義,這樣就簡化了開發的成本。

    繼承使用關鍵字extends,在Java中,除接口外,類都是單繼承的,因爲如果多繼承的話,如果有相同的特徵方法,會造成困擾,不知道子類繼承的是哪個父類的方法;接口可以多繼承,是因爲接口中的類都是abstract的,沒有具體的方法體,不管繼承哪一個都是一樣的,但是不同接口中的名稱和參數類型一樣的方法,必須有相同的返回類型,不然也會造成繼承的混淆。

Java特徵之三:多態

    多態是指不同的類的對象,對相同的消息,做出不同的行爲。

    封裝通過合併特徵和行爲來創建新的數據類型。繼承允許將對象視爲它自己本身的類型或者基類型來加以處理。而多態的作用則是消除類型之間的耦合關係。

多態有向上轉型和向下轉型:

    1、向上轉型:子類轉成父類

      Father()   father  =  new  Child();

    這是自動轉型,不需要別的操作

   2、向下轉型:父類轉成子類

    如果寫:Child()    child  =  new  Father()是無法編譯通過的,這時候需要強轉:

    先向下轉型:Father()   father  =  new  Child();

    然後強轉:Child()  child  =  (Child) father;

    並且在繼承關係中,是父類的引用指向了子類,子類重寫了父類的方法,比如:Father()   father  =  new  Child();

如果調用 father.test() 方法的話,其實調用的是子類中重寫的父類的方法,而不是調用的父類中的方法。