簡單明瞭——過載與重寫區分及修飾符許可權問題
阿新 • • 發佈:2018-11-14
方法的過載:
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方法和屬性,也只能在該子類中訪問(除非重寫方法或屬性)