一個類總能夠訪問自己的數據成員和成員方法。
但是,其他類是否能訪問這個類的數據成員或成員方法,是由該類的訪問控制符及該類數據成員和成員方法的訪問控制符決定的。
訪問控制符是一組限定類、數據成員或成員方法是否可以被其他類訪問的修飾符。
類的訪問控制符只有 public 一個,缺省訪問控制符時具有“友好訪問”的特性。
數據成員和成員方法的訪問控制符有 public、private、protected 和缺省訪問控制符等幾種。
1 公共訪問控制符 public
Java 的類是通過包的概念來組織的,定義在同一個程序文件中的所有類都屬于同一個包。
處于同一個包中的類都是可見的,即可以不需要任何說明而方便地互相訪問和引用。
而對于不同包中的類,一般說來,它們相互之間是不可見的,當然也不可能互相引用。
當一個類被聲明為 public 時,只要在其他包的程序中使用 import 語句引入這個 public 類,就可以訪問和引用這個類,創建這個類的對象,訪問這個類內部可見的數據成員和引用它的可見的方法。
當一個類的訪問控制符為 public 時,表明這個類作為整體對其他類是可見和可使用的,這個類就具有了被其他包中的類訪問的可能性。
但是,處于不同包中的 public 類作為整體對其他類是可見的,并不代表該類的所有數據成員和成員方法也同時對其他類是可見的,這得由這些數據成員和成員方法的修飾符來決定。
只有當 public 類的數據成員和成員方法的訪問控制符也被聲明為 public 時,這個類的所有用 public 修飾的數據成員和成員方法也同時對其他類是可見的。
在程序設計時,如果希望某個類能作為公共工具供其他的類和程序使用,則應該把類本身和類內的方法都定義成 public。
需要注意的是,數據成員和成員方法的訪問控制符被聲明為 public 時,會造成安全性和封裝性的下降,所以一般應盡量少用。
2 缺省訪問控制符
若一個類沒有訪問控制符,說明它具有缺省的訪問控制特性,這種缺省的訪問控制特性稱為“友好訪問”。
友好訪問規定只有在同一個包中的對象才能訪問和引用這些類,因此,又稱為包訪問性。
同理,類內的數據成員和成員方法如果沒有訪問控制符來限定,也具有“友好訪問”特性,它們也具有包訪問性,可以被同一個包中的其他類所訪問和引用。
3 私有訪問控制符 private
用 private 修飾的數據成員或成員方法只能被該類自身所訪問和修改,而不能被任何其他類(包括該類的子類)來訪問和引用。
它提供了最高的保護級別。
當其他類希望獲取或修改私有成員時,需要借助于類的方法來實現。
4 保護訪問控制符 protected
用 protected 修飾的成員變量可以被三種類引用:該類自身、與它在同一個包中的其他類、在其他包中的該類的子類。
使用 protected 修飾符的主要作用是允許其他包中的它的子類來訪問父類的特定屬性。