java oop詳解


近日來重溫了一下java oop的知識。加深了對面向對象的理解。尤其時繼承方面。故寫一篇博客。記錄一下自己的想法和心得

 

1.面向對象主要分為三大點(封裝,繼承,多態)

封裝的思想促進了類的形成。相比於之前面向過程的編程。所有的方法和屬性都堆積在一個main方法中,代碼無法重復利用。重復率高。代碼的可讀性也非常的差。因此。封裝呼之欲出。將共有的成員變量和行為封裝成類。方便代碼的復用和隱藏。

 

繼承:將多個類的共有屬性和方法封裝成一個父類。而繼承該父類的子類將擁有父類擁有的屬性和方法。減少代碼的重復率。

  (1.成員變量:(結論1)父類的成員變量會被子類繼承,且子類對象中該成員變量和子類中的父類對象的該成員變量指向一個內存地址。也就是說,改變一個,另一個也會被改變

   (結論2)子類還可以重新定義相同名字的成員變量,此時,父類中的成員變量將對於子類被隱藏。改變子類的成員變量時,就是改變子類新定義的成員變量。而子類對象中的父類對象的成員變量並沒有改變。此時想要在子類中調用父類的隱藏成員變量,只能通過super或者父類的引用來調用。

  下面是不同修飾符修飾父類成員變量時繼承的詳解

    (1.1由(public、default、protected、private)修飾的成員變量。子類都可以繼承。但是在子類中是否能夠訪問就取決於父類成員變量的修飾符了。且他們都滿足上面論述的兩段話。也就是說,當子類繼承了父類的成員變量后,子類和父類的成員變量指向的是同個地址,當一個改變。。。。重復上面的話。當子類無法訪問到父類的成員變量的時候,子類會去定義新的成員變量,父類的同名成員變量就被隱藏了。

    (1.2由static修飾的成員變量。子類都可以繼承。此時,繼承過來的也是static變量。也就是說,父類和子類共享同一內存的靜態變量。一個改變另一個也跟着改變。(注意比價static變量和普通變量的區別,我加黑的兩段話。一個針對於類,一個針對於對象)。同時,子類還可以定義新的同名成員變量(無論是否為靜態),此時父類中的靜態變量都會針對於子類被隱藏。

    (1.3由final修飾的成員變量,子類都可以繼承.此時繼承而來的是final類型的變量,子類無法去更改他。且滿足結論一。且此時子類可以重新定義同名(不要求類型)的變量,此時父類中的成員變量也會相對於子類被隱藏。

 

  (2.方法:父類的方法是否能被子類繼承。繼承之后能否被重寫,能否體現出多態。就要關注父類中該方法的修飾詞。(排除一個,父類的構造方法無法被子類繼承)

    (2.1 由public default protected private 定義的方法,子類都能夠繼承。只是,子類能不能訪問到或者說調用到這個方法就要看父類方法前的控制符了。只要子類能夠訪問到該方法,子類就能重寫該方法。此時,多態可以體現

    (2.2由static修飾的方法,子類都可以繼承,且可以通過父類或者子類的類名以及對象去訪問。但是,該方法無法被子類重寫。如果子類想定義同名的方法,除非時static方法,要不然編譯器會報錯。顯示不能重寫。而子類定義同方法簽名的static方法時,編譯器會認為這是子類新定義的方法。父類中的方法將會針對於子類被隱藏。此時,父類引用指向子類對象的多態行為消失。改變成根據引用來調用方法。

  針對於static方法的無法重寫性,我們可以在抽象類中定義static非抽象方法,此時,表明子類的實現過程都一致,都是被父類提前編寫好了,子類無法重寫,斷絕子類手滑重寫不該重寫的方法的可能性。

    (2.3由final修飾的方法,子類都可以繼承,但是別說重寫了,就連隱藏,都無法隱藏。因此,此時的子類只能老老實實的用父類的方法。要么,對其進行方法重載,說白了是定義一個不一樣的方法。多態行為消失

    (2.4由abstract修飾的方法,子類必須繼承然后重寫。多態行為體現

 

3.多態:多態總結起來就是一句話,父類的引用指向子類對象。此時調用的方法是子類重寫過的方法。多態的具體體現有:繼承(抽象類也是繼承的一種體現),接口


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM