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