java學習筆記(三)--(物件程式設計-類與方法下)
***重要***
程式碼塊
定義:使用{}定義的一段程式碼
根據程式碼塊出現的位置以及關鍵字不同,分為以下四類程式碼塊
-
普通程式碼塊
定義在方法中程式碼塊,瞭解即可(作用域不同)
-
構造塊(***重要***)
定義在類中的程式碼塊(不加任何修飾符)
當有物件產生時,構造塊優先於構造方法執行,產生幾個物件,就呼叫幾次構造塊
作用:在構造方法執行之前進行一些初始化操作
範例:
-
靜態程式碼塊
作用:在類中使用static定義的程式碼塊
1.非主類的靜態程式碼塊
靜態程式碼塊在類載入(主方法中使用)時被呼叫,優先於構造塊,不管產生多少例項化物件,只會被呼叫一次
範例:
2.主類中的靜態程式碼塊 (***重要***)
主類中的靜態程式碼塊優先於主方法執行
範例:
-
同步程式碼塊(多執行緒同步再講)
2.繼承-無須重寫原有類程式碼的基礎上,就擁有原有類所有屬性與方法,對原有類進行功能上的擴充套件
套用 is a
主要作用:繼承強調可重用
定義了一個person類,裡邊有姓名,年齡,地址等資訊,又第一一個student類,同樣裡邊包含了姓名,年齡等資訊,這裡的student屬於person類,直接就可以繼承person類
子類(派生類)
父類(超類,基類)
class 子類 extends 父類
繼承的限制:
a.子類例項化前先呼叫父類構造方法,產生父類物件後再呼叫子類構造(***重要***)
b.Java只允許單繼承,不允許多繼承,允許多層繼承
c.在進行繼承的時候,子類會繼承父類的所有結構(包含私有屬性,構造方法,普通方法) (***重要***)
顯示繼承(可以直接呼叫):父類中的所有非私有操作
隱式繼承,可以繼承(必須通過其他形式呼叫,getter與setter,不能直接呼叫):父類中的所有非私有操作 private只允許本類使用
範例:顯示繼承與隱式繼承
如上所示,父類中屬性的確被子類繼承,但是在子類中只能使用非私有操作
3.方法覆寫(***重要***)--override
覆寫概念:發生在有繼承關係的類之中,子類定義了與父類完全相同的方法(返回值,引數列表,方法名全一樣)。被覆寫的方法不能擁有比父類更為嚴格的訪問控制權限
範例:簡單的覆寫
訪問控制權限:子類的覆寫方法大於等於父類的方法許可權
方法覆寫不能出現private.隱式繼承方法無法被覆寫 (***重要***)
判斷當前方法呼叫的是哪個類的方法:(***重要***)
a.當前使用的物件是通過哪個類new的
b.呼叫的方法是否被子類所覆寫,如果被覆寫,則呼叫的一定是子類所覆寫的方法
private-私有訪問<default(啥也不寫)-包訪問許可權<public(共有訪問許可權)
解釋方法過載(overload)與方法重寫(override)的區別 (***重要***)-- Java常考面試題(灰常重要)
-
概念:過載:方法名稱相同,引數的型別以及個數不同。覆寫:方法名稱,返回值,引數型別以及個數完全相同。
-
範圍:過載:在一個類中。覆寫:繼承關係。
-
許可權要求:過載:沒有許可權要求。覆寫:被覆寫的方法不能擁有比父類更為嚴格的訪問控制權限
例如:現在已經接觸了三種訪問控制權限:private<default<public。那麼也就意味著如果父類使用public進行方法宣告,那 麼子類必須也使用public;如果父類使用default,那麼子類可以使用default或者public。
假如父類中使用private定義方法,子類中使用public覆寫,會出現什麼情況?
範例:父類使用private定義的方法,子類中使用public覆寫