1. 程式人生 > >簡單明瞭——過載與重寫區分及修飾符許可權問題

簡單明瞭——過載與重寫區分及修飾符許可權問題

方法的過載:

   1.方法名必須相同

   2.引數列表必須不同

   3.其他修飾符可以相同,也可以不同

   4.可以丟擲不同異常

方法的重寫:

   1.方法名、引數列表、返回值型別都必須相同

   2.訪問修飾符必須大於或等於被重寫的方法

   3.重寫的方法中,不能丟擲新的異常或被重寫的方法更多、更大的異常,但一定會丟擲異常。也就是說,只能丟擲相同的異常或是被重寫方法異常的子異常,還可以丟擲非編譯異常(RuntimeException)

   4.重寫方法只會存在於具有繼承關係的子類中,而當父類中的方法用private修飾時,即使子類中有重名方法,也不叫方法的重寫

   5.非靜態方法不能被重寫成靜態方法

訪問許可權:
修飾詞:根據作用範圍來進行劃分

private 預設的(default/friendly) protected public
同一個類中 可見 可見 可見
同一個包中 不可見 可見 可見
不同的包中有繼承關係 不可見 不可見 可見
不同的包中沒有繼承關係 不可見 不可見 不可見

四種訪問許可權:
1.public:只能修飾類、方法(含構造方法)、成員變數。其修飾的部分所有人都能訪問;

2.預設修飾符(friendly):只能修飾類、方法(含構造方法)、成員變數。其修飾的部分只有同一包內的類能訪問,
對於這個包之外的所有類,這個成員是private的;

3.private:只能修飾方法(含構造方法)、成員變數。其修飾的部分只能在自身類中訪問。例如將某類的構造方法設定為private,
那麼在其它類中就不能呼叫“new”來建立該類的例項,通常在該類中會對外提供一種方法,該方法能返回該類的例項;
再例如我們經常將成員變數設定為private的,對外提供set/get方法對其進行訪問,在set/get方法中可做一些比如許可權檢測等操作,
而不是將域直接暴露給所有使用者;

4.protected:只能修飾方法(含構造方法)、成員變數。

在同一包中具有包訪問許可權,相當於預設訪問許可權;

注意事項:在子類中,可繼承不同包內父類的protected方法和屬性,也只能在該子類中訪問(除非重寫方法或屬性)