java oop詳解

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

 

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

封裝的思想促進了類的造成。相比於以前面向過程的編程。全部的方法和屬性都堆積在一個main方法中,代碼沒法重複利用。重複率高。代碼的可讀性也很是的差。所以。封裝呼之欲出。將共有的成員變量和行爲封裝成類。方便代碼的複用和隱藏。oop

 

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

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

相關文章
相關標籤/搜索