1. 程式人生 > >java學習筆記(三)--(物件程式設計-類與方法下)

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覆寫