Java控制修飾符,子類與父類,組合重載覆蓋等問題

本次主要針對以下幾個問題:
在這裏插入圖片描述

1.java的訪問控制修飾符有哪些?各自有什麼訪問權限?
如圖所示:
在這裏插入圖片描述
(1)public:表示該成員是公開的,其他所有類都可以訪問
(2)protected:表示該成員是受保護的,其子類可以訪問protected裏的成員,同時包中的其他類也可以訪問該成員
(3)private:表示該成員是私有的,只有該類內部才能訪問
(4)默認:包訪問權限,包內部的類可以訪問該成員

可以用一個圖來表示:
在這裏插入圖片描述

2.子類對於父類繼承的那些方法和屬性是可見的?
子類從父類繼承的public和protected成員是可見的,而繼承的private成員是不可見的。
所謂可見簡單來說就是能否直接調用,能直接調用則是可見的,否則不可見
例如:
在這裏插入圖片描述
定義hello父類,然後s類繼承,可以看到圖中輸出aa.id.是錯誤的,因爲域變量id的修飾符爲private,子類不能直接訪問,對s類和其實例化對象來說,id便是不可見的,會出現如下錯誤提示:
在這裏插入圖片描述
此時將private該成protected或者public,子類可以直接訪問,可見,就會正確。
若是依舊用private要輸出id便只有藉助hello類的可見方法間接調用該域變量。

3.什麼是組合?
簡單來說組合就是某類的對象引用做另一個類的數據成員,相當於這個類是另一個類對象的一個屬性!
例如:
在這裏插入圖片描述
圖中便是一個組合,而此處有了發消息的概念
發消息便是用來說明 使用引用的屬性或方法便是調用對象的屬性或方法的一個過程
如圖中 s類的System.out.println(h.name),就是通過hello對象引用h調用了hello類的name屬性

4.什麼是重載?
在類中定義了多個同名而不同內容參數的成員方法時,稱這些方法爲重載
如圖所示:
在這裏插入圖片描述

類中有三個同名的方法,分別根據參數的個數和參數的不同實現不同的內容
需要注意的是,java中的重載不能只是返回值不同,編譯不會通過;而c++可以

5.什麼是覆蓋?
子類對父類參數相同,返回類型相同的同名方法進行定義,這種多態便稱爲覆蓋
例如:
在這裏插入圖片描述
此時輸出的爲 s;因爲父類的say方法被子類覆蓋了,say方法被子類重新定義
在這裏插入圖片描述
而如果不用覆蓋,則輸出的爲 hello

希望淺顯的說明對大家有幫助,有錯誤也歡迎大家指正,大家相互學習共同進步!