- 深入淺出Java編程
- 遲殿委 王健編著
- 1754字
- 2022-07-29 14:20:00
6.3 訪問修飾符
權限修飾符號從小到大分別為private、默認、protected和public。本節會涉及一些方法的調用,但不會太過復雜,所以不必擔心。private聲明的方法或是成員變量,只能當前類自己訪問。public聲明的成員變量或者方法,所有其他類都可以訪問。這四個修飾符的功能如表6-1所示。
表6-1 四個修飾符的功能

包的功能:
(1)通過將相同名的類放到不同的包中加以區分。
(2)進行基本的權限控制。
(3)描述功能及模塊。
需要注意的是,public和默認修飾符可以用于修飾頂層類(直接聲明到文件中的類)。內部類(聲明到其他類內部的類)可以被所有權限符號修飾。如下聲明是錯誤的,因為使用private權限修飾符修飾了一個頂層類:
1. private class Hello{ 2. }
現在讓我們通過代碼來展示這些權限修飾符的可訪問性。下面先從private開始。
6.3.1 private修飾符
private關鍵字表示私有的,可以修飾成員變量和成員方法,不能修飾局部變量。被private修飾的成員變量或成員方法只有當前類可以訪問,其他類都不能訪問另一個類的私有信息。以下代碼訪問的都是自己的私有成員信息。
【文件6.12】PrivateDemo.java

在上面的代碼中,第3行聲明了一個實例成員變量,第4行聲明了一個實例成員方法。這兩個方法都不是靜態的。在Java中,如果要從靜態的方法中調用非靜態的方法,就必須先實例化當前類,所以在第8行必須先聲明PrivateDemo類的實例對象,即使用new關鍵字聲明PrivateDemo類的實例。最重要的是,無論是public、protected、默認還是private,當前類都是可以調用的。
用private聲明的成員方法或是成員變量,其他類不能調用,如以下代碼所示。
【文件6.13】PrivteDemo2.java

【文件6.14】InvokeDemo.java

在上面的代碼中,第4行首先實例化了PrivateDemo類對象。然后在第5、6行訪問私有的成員變量和成員方法。PrivateDemo中只有私有的成員變量和方法,第5、6行編譯會出錯,因為在InvokeDemo類中不能訪問其他類的私有成員變量和成員方法。
6.3.2 默認修飾符
默認修飾符也可以叫作friendly(友好的),但是friendly并不是關鍵字。當一個方法或者成員變量沒有使用任何權限修飾符時,默認的權限修飾符將會起作用。默認修飾符可以修飾類、成員方法和成員變量,表示同包中的類可以訪問,同包中的子類也可以繼承父類被默認修飾符修飾的成員或者方法。
下面展示在相同包下和在不同包下默認修飾符的訪問能力。
第一個類:
【文件6.15】DefaultDemo.java

第二個類與DefaultDemo類在相同的包中:
【文件6.16】Demo01.java

在上面的代碼中,由于class Demo01與DefaultDemo在相同的包中,因此在Demo01中可以訪問DefaultDemo中的成員變量和成員方法,即第5、6行編譯通過。
第三個類與DefaultDemo類在不同的包中:
【文件6.17】Demo02.java

在上面的代碼中,由于Demo02與DefaultDemo不在同一個包中,所以第5、6行編譯出錯。因為在不同的包中不能訪問另一個包的默認修飾符的成員信息。
第四個類與DefaultDemo類在相同的包下,通過繼承訪問DefaultDemo中的成員信息,并且繼承將會在后面的章節中具體講到。繼承關鍵字為extends,通過extends可以讓當前類變成另一個類的子類。
【文件6.18】Demo03.java

在同一個包中,一個類可以通過extends關鍵字繼承另一個類默認的、protected和public的成員方法和成員變量。所以,第8行和第9行的編譯和運行都能通過。
6.3.3 protected修飾符
protected修飾符用于修飾成員方法和成員變量,主要用于描述被修飾的對象可以被同包中的類訪問和子類繼承。protected也用于描述繼承關系,所以如果大家在Java API中發出一些方法被protected修飾,語義上這個方法主要是用于讓子類繼承或者重寫(后面會講到重寫的概念)的。
以下代碼展示在不同的包中,通過繼承訪問另一個類受保護的成員信息。
【文件6.19】ProtectedDemo.java

以下聲明一個不同包中的類,然后通過繼承獲取受保護的成員變量和成員方法的訪問能力。
【文件6.20】Demo01.java

上例的代碼通過extends繼承了ProtectedDemo。所以,在子類中可以直接訪問父類中被保護的成員信息,即第4、5行的代碼。
6.3.4 public修飾符
public修飾符表示公開、公有的。public修飾符可以修飾類、成員方法、成員變量,被public修飾的類叫公共類,可以被其他任意類聲明。被public修飾的成員方法和成員變量,其他類都可以調用。
關于public的使用,在此不再贅述。
6.3.5 權限修飾符小結
權限修飾符用于修飾方法、成員是否可以被訪問。值得說明的是,權限修飾不能修飾局部變量。
用private修飾的方法或者成員變量只能被當前類訪問。一般在企業的開發中不會直接暴露成員變量,所以成員變量一般都是用private修飾的。成員方法是為了讓其他對象調用的,所以一般成員方法都用public修飾的。
protected修飾符主要用于修飾成員變量和成員方法,語義上表示讓子類繼承。
public修飾符修飾的方法或成員是為了讓所有其他對象訪問。
在使用某一個修飾符時,要了解如何使用成員方法或者成員變量,然后添加不同的修飾符。