存取修飾子

介紹Java的存取修飾子 public、private、protected,以及四種權限範圍

為什麼需要存取修飾子? Why Access Modifier?

上一章的package有談過,一個專案或系統通常都是團隊分工完成的,也就是說每個人負責自己的部份,透過一定的配合來完成專案的目標。 在寫程式的過程中,難免會有些自己特有的技術不想公開給別人知道。或是開放特定的方法讓別人存取,但不想讓別人知道類別中細部的設定(或許被隨意設定那個方法就失效了)。

物件導向有一個重要特性,封裝(Encapsulation),封裝的概念是把內部的資料、實作細節隱藏起來,只開放要給別人存取的方法給別人存取。這個方法是該類別擁有者期望你去使用的方法,利用此方法來達到某個特定功能。

利用存取修飾子來控制什麼可以讓別人看到、什麼不要讓別人看到。藉此保護程式的安全、完整性。

在 Java定義的關鍵字中,有3個存取修飾子:

  1. public

  2. protected

  3. private

嗯,這當然不是我多列一項XD 而是雖然有3個修飾子,但有4種權限範圍。

存取修飾子主要是控制類別間能不能互相存取的要素。

因此我們會特別討論4種情況; 1. 同一類別 (class) 2. 同一套件 (package) 3. 子類別 (subclass) 4. 不同套件 (world)

可以存取的意思就是,用於變數方法上,可以透過點運算子直接存取、呼叫。 用在類別上,就是可以利用該類別來建立物件。

可以把存取修飾子想像成能不能被別人看到。

public 公開

public int value = 10;

就像字面上的意思,任何人都可以進行存取。 也就是最輕鬆簡單,大家都存取的到,所以上面4種情況都有,是權限範圍最大的。

protected 保護

protected int value = 10;

保護的意思是,不同套件的類別中,僅限該類別的子類別可以存取。 是這4種權限中開放範圍第二大的。

(no modifier,預設)

int value = 10;

如果沒有寫任何修飾子,就是這種權限,有些人會稱這種權限為 package。 因為在同一個package內的類別都可以存取,不同套件存取不到。

private 私有

private int value = 10;

private權限範圍是最小的,只有自己類別的成員可以存取,要做資料方法的隱藏性很常使用此修飾子。

修飾子比較表:

修飾子

同一類別

同一套件

不同套件的子類別

不同套件且非子類別

public

protected

(no modifier)

private

Last updated