在學習Java基礎時會時不時用到一些修飾符,這些修飾符修飾的內容不一樣,範圍也不一樣,只有梳理清楚才能正確的使用它們。 不同修飾符修飾內容的範圍 public
public公用的,表示該屬性(或方法)公開,所有使用者都可以直接進行調用。 default預設
default表示預設,不僅本類訪問,而且是同包可見。 private
private私人的,表示該屬性(方法)為只有本類內部可以訪問(類內部可見)。(想用private還要用set和get方法供其他方法調用,這樣可以保證對屬性的訪問方式統一,並且便於維護存取權限以及屬性資料合法性)。
如果沒有特殊情況,屬性一定私人,方法該公開的公開。
如果不指明誰調用方法,則預設為this。區分執行個體變數和局部變數時一定要寫this。 protected
protected受保護的,對於子類和同包下的類可見,就是public的,可以自由使用,沒有任何限制,而對於其他的外部class,protected就變成private。 列表對比如下:
常用修飾符修飾內容的範圍
| 修飾符 |
本類 |
同一包下(有無關係均可) |
子類 |
其他包 |
| public |
|
|
|
|
| protected |
|
|
|
|
| 預設(default) |
|
|
|
|
| private |
|
|
|
|
不同修飾符可以修飾的內容 public、private、protected和預設default
以上幾個都可以用來修飾成員變數、成員方法和構造方法,只是有些常見,有些不常見,使用場合約定俗成。除此之外,public還可以用來修飾類本身。
下面針對一些特殊的修飾符來進行介紹。 abstract
abstract抽象的,可以修飾類、方法。
抽象類別:
abstract修飾的類稱為抽象類別,此類不能被執行個體化,必須被繼承使用,如果一個類繼承抽象類別,那麼這個類要麼本身也是抽象類別,要麼這個類重寫父類的所有抽象方法。
abstract可以將子類的共性最大限度的抽取出來,放在父類中,以提高程式的簡潔性。
抽象方法:
方法沒有方法體,且用abstract修飾。有抽象方法的類一定是抽象類別(或者介面);抽象類別中不一定有抽象方法。
注意:不能與final,private和static共存。 static
static靜態,是一個修飾符,用於修飾成員(包括成員變數和成員方法)。修飾的成員被所有的對象所共用。
被修飾後的成員具備以下特點:
①隨著類的載入而載入。
②優先於對象存在。
③被所有對象所共用。
④可以直接被類名調用。
static修飾變數的使用可參考一下《Java基礎——成員變數、局部變數和靜態變數的區別》 final
final最終的,它可以修飾類,修飾成員變數,修飾成員方法。
它修飾的類,不能被繼承。
它修飾的成員方法,是不可以被子類重寫的。
它修飾的成員變數,其實是一個常量。
關於abstract和final的有關用法,可以參考另一篇博文《Java基礎——抽象類別和介面的關係》 列表對比如下:
常用修飾符的修飾內容
| 修飾符\元素 |
類本身 |
成員變數 |
成員方法 |
構造方法 |
| public |
|
|
|
|
| 預設 |
|
|
|
|
| private |
|
|
|
|
| protected |
|
|
|
|
| abstract |
|
|
|
|
| static |
|
|
|
|
| final |
|
|
|
|
分析以後可以看出同一內容可以由不同的修飾符來修飾,有必要找出常見的規則,如下:
所有的類都用public修飾,並且,在一個Java檔案下,我們唯寫一個類。
所有的成員變數用private修飾。
所有的成員方法用public修飾,
如果是在抽象類別或者介面中用 public abstract修飾。
所有的構造方法用public修飾,
如果類是工具類或者單例類,則構造用private修飾。
小結
修飾符雖然多,但是基本上各司其職,會有協同的時候,同樣也會有拮抗作用。在進行不同操作的時候,使用不同的修飾符,程式才能高效有序無誤的運行。