java訪問控制符

Java中的控制符,用來控制其他類能否訪問Java中的某一方法、變量,即控制java類、方法、變量的可見性、可訪問性,從而實現數據封裝。Java中有兩個級別的訪問控制符。

類級別:控制其他類能否使用該類。有2中類型: public 和 package-private
成員級別:控制某一方法、變量的訪問權限。有4種類型: public , protected, package-private, private。

首先解釋一下“使用”一詞到底是什麼意思?對於方法,很顯然就是調用;對於變量,則是指訪問或者修改;而對於類,則是指繼承、實例化等,也就是能否在import中導入。

需要注意的事,方法和變量的訪問控制實在類級別訪問的基礎之後增強的,也就是先經過類級別這層控制之後,再加上成員級別的控制。通過這兩個級別的權限控制,可以對Java中的類、方法、變量進行精確控制,進而實現我們想要的任何程度的數據封裝。下面分別介紹着兩個級別的訪問控制符。

類級別:
一個類可以被聲明爲public,在這種情況下,這個類可以被任何其他類導入使用(但是具體到某個方法或者變量時,需考慮第二層成員級別控制)。

如果類沒有控制訪問描述符,則表示默認,也就是包私有(package-private),這時該類除了能在本類中使用外,還能被同一個包中的其他類使用。注意包的概念,不包括子包。

備註:如果是內部類,可以使用private修飾符。下面的討論都針對一般類

成員級別:
成員級別可以使用類級別中的public, package-private,其意義與類級別完全一樣。除此之外還可以使用private和protected。但是要注意,默認方式不能用於接口變量和方法。
private :如果某個成員被private修飾,則它只能在它所在的類中被使用( The private modifier specifies that the member can only be accessed in its own class.)。
protected: 如果用protected修飾,除了能被同一個包中的其他類(無論是否繼承自該類)使用之外,還能被其他包中的子類使用。(The protected modifier specifies that the member can only be accessed within its own package (as with package-private) and,in addition, by asubclass of its class in another package.)注意接口中的變量和方法一樣不能使用protected修飾符。

總結如下表:
這裏寫圖片描述

例如,有兩個包one和two,四個類如下圖所示
這裏寫圖片描述

對於Alpha這個類中的成員,其他類的訪問權限如下表:
這裏寫圖片描述

繼承與訪問修飾符:
繼承中,子類和父類的修飾符需要遵守一些規則,具體如下:

父類方法爲public,子類也必須爲public
父類爲protected,子類必須爲protected或者public
父類中的private方法沒有繼承的說法。

子類繼承自父類,所以父類中提供的方法接口,子類都必須提供。否則,如果我們將一個子類的對象賦給父類對象,就會出問題。如下:

public class Animal {  
  public String getName() { return this.name; }  
}  

public class Lion extends Animal {  
  private String getName() { return this.name; }  
}  
Animal lion = new Lion();  
System.out.println( lion.getName() );//invalid  

此時,lion聲明爲Animal類型,但它的實際類型是Lion。Animal類型提供了公開的getName接口,而子類卻變成private,不行!!

一個疑惑
假設現在我們將一個類聲明爲package-private,也就是這個類只能被跟它在同一個包的類使用。那麼在這個類當中,一個聲明爲protected或者public的方法似乎已經不是很有意義,因爲默認的package-private就已經足夠了,其他包中的類不能使用這個類,更不用說使用方法了,那麼在實際開發中呢,到底什麼樣的實踐纔是最佳的,有待進一步研究。

猜測:
如果一個類聲明爲package-private則該類中的方法聲明爲public,protected,和package-private 效果是一樣的。
總結:子類中重載的方法的訪問控制符必須必父類弱,如圖:
這裏寫圖片描述

(轉載請註明出處)
出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章