💡涉及的知識點速通
- 🛫 OOP的三大特征都是什么?
- 🪂 什么是封裝?
- 🪂 什么是繼承?
- 🪂 什么是多態?
- 🛫 關于構造器你都知道什么?
- 🛫 關于類的源文件都需要知道什么?
- 🛫 重載和重寫都是什么?
??各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺
🛫 OOP的三大特征都是什么?
??要想知道OOP的三大特征,首先應該知道什么是OOP,OOP就是Object Oriented Programming面向對象程序設計語言,Java就是這么一門語言。面向對象程序設計語言的三大特征是封裝、繼承、多態,封裝說明一個類的行為屬性與其他類的關系——高內聚低耦合;繼承是超類對子類的擴展;多態是超類變量的引用指向子類對象。
🪂 什么是封裝?
??封裝又叫數據隱藏,是處理對象的一個重要概念。簡單來說封裝就是將類的屬性和行為組合在一個包中,并對對象的使用者隱藏內部的具體實現方式。實現封裝的關鍵在于程序只能通過對象的方法與對象的數據進行交互(故又被認為是"黑盒"),無需知道對象的內部細節,這是提高重用性(其他類可以通過對象直接調用類的屬性方法)和可靠性(隱藏內部細節,無法直接修改屬性)的關鍵
??除了以上優點封裝還有:我們可以使用訪問器和更改器對外提供一個封裝字段的獲取和修改方法,并且可以在更改器中使用代碼完成錯誤檢查邏輯等操作,如果單純將字段暴露出去隨意調用的話就無法完成這個操作。
🪂 什么是繼承?
??繼承的基本思想就是可以基于一個已有的類來創建新的類,繼承已存在類就可以復用這個類的屬性方法,除此之外還可以在繼承的基礎上自定義一些新的屬性和方法。繼承通過extends關鍵字完成,一個類只能繼承自一個超類,但是超類還可以繼承自其他的超類,這就是間接繼承。
??謹記,繼承之后可以在子類中可以增加字段和方法或者覆蓋(重寫)方法,但是繼承絕不能也不會刪除任何字段或者方法
🪂 什么是多態?
??多態形式上就是超類的變量引用指向子類對象,于是多態的另一個要素就是兩個類之間有繼承關系。當使用多態實例化對象調用方法的時候,調用子類自定義的獨有方法時會報錯調用的超類方法被子類重寫后會使用子類重寫的方法
🛫 關于構造器你都知道什么?
??首先是構造器的簡介:構造器又被稱為構造函數,要想使用對象的話,首先必須要構造對象,在構造對象的同時構造器會運行并初始化類中字段的初始狀態。關于構造器我們還需要了解的是:
- 構造器的命名應該與類相同
- 每個類中能夠有一個以上的構造器
- 構造器的參數可以是0~無數個
- 構造器沒有返回值
- 千萬別在構造器中定義與實例字段同名的局部變量
- 構造器總是伴隨著new操作串一起使用來實例化對象(實例化出來的Java對象都在堆中存儲,使用new實例化會返回該對象的地址)
??如果在自定義類編寫的時候不去定義構造器的話,編譯器會默認提供一個該類的無參構造器,無參構造器沒有初始化方法體的話就會初始化所有的變量成該數據對應類型的默認值,有初始化方法體就按方法體對字段進行初始化。只要是你定義了一個有參構造器的話,就不會提供默認的無參構造器,此時使用無參構造器實例化對象的話就會產生異常
🛫 關于類的源文件都需要知道什么?
??一個.java文件中只能有一個public修飾的公共類,但是可以有任意數目的非公共類,源文件的文件名就是由這個public修飾的類名加上.java后綴組成??當編譯這個擁有兩個類的.java文件時,編譯器會在目錄下創建兩個類文件:一個是Test_construtor.class字節碼文件,一個是Test.class字節碼文件
??main方法可以在任意一個類中(公共類或者非公共類都可以),運行的時候需要將包含main方法的類名交給java.exe程序,即可執行返回相應的結果
??使用通配符*可以完成多個源文件的調用,這里假設People類和Fork類被分別放在兩個源代碼文件中,如果編譯器發現People源文件使用到了Fork類的時候,就會查找名為Fork.class的字節碼文件,如果找不到就會搜索Fork.java源代碼文件進行編譯。更重要的是,如果Fork.java的字節碼文件有更新的話(也就是內容發生改變),java編譯器就會自動重編譯這個源代碼文件。
🛫 重載和重寫都是什么?
方法重載
??方法重載就是一個類中方法名相同但是方法的參數列表不相同的一堆方法,在這里參數列表不同說的是參數的類型、參數的個數、甚至于參數的順序不一樣。訪問權限和方法的返回值類型不能作為方法是否重載的判斷依據,也就是說當方法名和參數列表一樣的時候,訪問權限和方法的返回值類型不管是否一樣都不算是方法重載。??方法出現重載的時候說明這個類中有兩個以上的同名方法,當我們調用方法的時候編譯器是如何確定到底調用的是哪個方法的呢?這就要說到重載解析的概念了,重載解析就是使用各個重載方法中的參數類型與特定方法調用所使用的值類型和順序進行匹配,從而挑選出正確的方法,當然都找不到的話就會產生編譯時異常。
??方法簽名的概念:方法名加參數類型的組合就是方法的簽名,一個類中無法存在兩個簽名一樣的方法方法重寫
??方法重寫就是當子類繼承超類之后就擁有了超類的屬性和行為,但是超類不想原封不動的使用超類的行為,于是就重新定義超類的方法體。方法的重寫應該注意的是:
- 重寫發生在超類和子類之間
- 重寫時的方法名、參數列表、返回值類型相同,但是如果重寫方法的返回類型是被重寫方法返回類型的子類的話也可以
- 重寫方法的訪問權限要大于被重寫方法(public>protected>default>private)
- 重寫方法不能拋出新的檢查異常或者拋出比被重寫方法范圍更大的異常
- 子類無法重寫超類的靜態方法和私有方法
重載與重寫的區別
??方法重載與重寫之間的區別:方法重載與重寫都是實現多態的一種方式,區別在于前者實現的是編譯時的多態性,而后者實現的是運行時的多態。重載發生在一個類中,重寫發生在子類與超類之間,有關這兩種形式中方法聲明的具體要求參見上面的答案