最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java之路(五) 訪問權(quán)限控制

 更新時(shí)間:2016年12月09日 08:26:00   作者:songoo  
本篇文章主要介紹了Java之路(五) 訪問權(quán)限控制 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。

在Java中,所有事物都具有某種形式的訪問權(quán)限控制。

訪問權(quán)限的控制等級從最大到最小依次為:public,protected,包訪問權(quán)限(無關(guān)鍵詞)和private。

public,protected和private這幾個(gè)Java訪問權(quán)限修飾詞在使用時(shí),是置于類中每個(gè)成員(域或者方法)定義之前的。

一、類成員的訪問權(quán)限

取得對某成員的訪問權(quán)的唯一途徑是:

  1).使該成員成為public。無論誰在哪里,都可以訪問該成員;

  2).通過不加訪問權(quán)限的修飾詞并將其他類放置于同一包內(nèi)的方式給成員賦予包訪問權(quán)限,包內(nèi)的其他類可以訪問該成員;

  3).繼承而來的類既可以訪問public成員也可以訪問protected成員。

  4).提供訪問器和變異器方法,以讀取和改變數(shù)值。

1.包訪問權(quán)限

默認(rèn)訪問權(quán)限沒有任何關(guān)鍵字,但通過是指包訪問權(quán)限,這表示當(dāng)前報(bào)中的所有其他類都對那個(gè)成員有訪問權(quán)限,但是對于這個(gè)包之外的所有類,這個(gè)成員確是private。

包訪問權(quán)限將包內(nèi)所有相關(guān)的類組合起來,以使它們彼此之間可以輕松地相互作用。

注意:如果兩個(gè)類處于相同的目錄下,并且沒有給自己設(shè)定任何包名稱,Java會(huì)將這樣的文件自動(dòng)看作是隸屬于該目錄的默認(rèn)包之中,于是這些文件互相之間有包訪問權(quán)限。

下面的例子說明了這個(gè)問題:

//類Cake和Pie處于同一目錄下,沒有明確的顯示在任何包中

class Pie{
  void f(){
    System.out.println("Pie.f()");
  }
}

class Cake{
  public static void main(String[] args){
     Pie x = new Pie();
     x.f();
   }
}

//輸出為Pie.f()

2.public:接口訪問權(quán)限

使用關(guān)鍵字public,就意味著其后的成員聲明對所有人可用,特別是使用類庫的客戶程序員也是如此。

3.private:你無法訪問

關(guān)鍵字private表示出了包含該成員的類之外,其他任何類都無法訪問這個(gè)成員。同一包內(nèi)的其他類不可以訪問這個(gè)類的private成員,因此這相當(dāng)于自己隔離了自己。

private關(guān)鍵字的這種作用有許多用途,比如,控制如何創(chuàng)建對象,阻止別人直接訪問某個(gè)特定的構(gòu)造器(或全部構(gòu)造器)???/p>

下面的例子:

class Sundae{
  private Sundae(){}
  static Sundae makeASundae(){
    return new Sundae();
  }
}

public class IceCream {
  public static void main(String[] args){
    Sundae x = Sundae.makeASundae();
  }
}

這個(gè)例子里,我們可以通過調(diào)用makeASundae()方法來創(chuàng)建Sundae對象,但是不能通過構(gòu)造器來創(chuàng)建。

這對于類中的private域同樣適用。

但是要注意一點(diǎn),不能因?yàn)樵陬愔心硞€(gè)對象的引用是private,就認(rèn)為其他的對象無法擁有該對象的public引用。

4.protected:繼承訪問權(quán)限

如果創(chuàng)建了一個(gè)新包,并自另一個(gè)包繼承類,那么唯一可以訪問的成員就是源包的public成員。

有時(shí),基類的創(chuàng)建者希望將某個(gè)特定成員的訪問權(quán)限賦予派生類而非所有類,這就需要使用關(guān)鍵字protected來實(shí)現(xiàn)。

注意,protected也提供包訪問權(quán)限,即相同包內(nèi)的其他類也可以訪問此類的protected元素。

二、接口和實(shí)現(xiàn)

訪問權(quán)限的控制通常被稱為具體實(shí)現(xiàn)的隱藏。

把數(shù)據(jù)和方法包裝進(jìn)類中,以及具體實(shí)現(xiàn)的隱藏,常共同被稱作是封裝。

出于兩個(gè)重要的原因,訪問權(quán)限控制將權(quán)限的邊界劃在了數(shù)據(jù)類型的內(nèi)部:

1.要設(shè)定客戶端程序員可以使用和不可以使用的界限??梢栽诮Y(jié)構(gòu)中建立自己的內(nèi)部機(jī)制,兒不必?fù)?dān)心客戶端程序員會(huì)偶然地將內(nèi)部機(jī)制當(dāng)做是他們使用的接口的一部分。

2.接口和具體實(shí)現(xiàn)進(jìn)行分離。

三、類的訪問權(quán)限

Java中,訪問權(quán)限修飾詞也可以用于確定庫中的哪些類對于該庫的使用者是可用的。

修飾詞必須放在關(guān)鍵字class之前。例如:

public class Widget{......}


improt access.Widget;

要知道,類不可以是private的(如果類是private的,那么除了該類之外,其他任何類都不可以訪問它),也不可以是protected的(其實(shí)一個(gè)內(nèi)部類可以是private或protected的,但這是特例,后續(xù)文章中敘述),只可以是包訪問權(quán)限或public的。

如果不希望其他人訪問該類,可以把該類的所有構(gòu)造器都指定為private,阻止任何人創(chuàng)建該類的對象。但這也有例外,這種做法不能阻止你在該類的static成員內(nèi)部創(chuàng)建該類。我們來看下邊的例子:

class Soup1{
  private Soup1(){}
  public static Soup1 makeSoup(){ //使用靜態(tài)方法創(chuàng)建對象
    return new Soup1();
  }
}

class Soup2{
  private Soup2(){}
  private static Soup2 ps1 = new Soup2(); //使用單例模式創(chuàng)建對象
  public static Soup2 access(){
    return ps1;
  }
  public void f(){}
}

public class Lunch {
  void testPrivate(){
  //Soup1 soup = new Soup1; 不能執(zhí)行
  }
  void testSingleton(){
    Soup2.access().f();
  }
}


我們可以看到,Soup1和Soup2類的構(gòu)造器都是private的,誰也無法直接使用構(gòu)造器來創(chuàng)建該類的對象了。但是我們也可以使用這兩個(gè)類:在Soup1中創(chuàng)建一個(gè)static方法,在這個(gè)方法中使用構(gòu)造函數(shù)創(chuàng)建一個(gè)Soup1對象并返回它的引用;Soup2的創(chuàng)建用了設(shè)計(jì)模式中的單例模式,只能創(chuàng)建它的一個(gè)對象。Soup2類的對象是作為Soup2的一個(gè)static private成員而創(chuàng)建的,所以有且僅有一個(gè),而且除非是通過public方法access(),否則是無法訪問到它的。

 此外,一些限制也值得注意:

1.每個(gè)編譯單元都只能有一個(gè)public類。

2.public類的名稱必須完全與含有給編譯單元的文件名相匹配,包括大小寫。

3.如果編譯單元內(nèi)沒有帶public的類,這時(shí)可以對文件隨意命名。

 以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java類和對象的設(shè)計(jì)原理

    Java類和對象的設(shè)計(jì)原理

    這篇文章主要介紹了Java類和對象的設(shè)計(jì)原理,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • 解決@ConfigurationProperties注解的使用及亂碼問題

    解決@ConfigurationProperties注解的使用及亂碼問題

    這篇文章主要介紹了解決@ConfigurationProperties注解的使用及亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • SpringBoot3使用devtools實(shí)現(xiàn)代碼熱部署的詳細(xì)步驟

    SpringBoot3使用devtools實(shí)現(xiàn)代碼熱部署的詳細(xì)步驟

    Spring Boot DevTools是一組用于提高開發(fā)人員生產(chǎn)力,并加速Spring Boot應(yīng)用程序開發(fā)的工具,它提供了一些功能,可以幫助開發(fā)人員更快速地構(gòu)建應(yīng)用程序,并減少常見的開發(fā)問題,本文給大家介紹了SpringBoot3使用devtools實(shí)現(xiàn)代碼熱部署的詳細(xì)步驟,需要的朋友可以參考下
    2024-01-01
  • java多態(tài)中的就近原則介紹

    java多態(tài)中的就近原則介紹

    大家好,本篇文章主要講的是java多態(tài)中的就近原則介紹,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • spring BeanProcessor接口詳解

    spring BeanProcessor接口詳解

    這篇文章主要介紹了spring BeanProcessor接口的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用spring,感興趣的朋友可以了解下
    2021-03-03
  • MyBatis-Plus中AutoGenerator的使用案例

    MyBatis-Plus中AutoGenerator的使用案例

    AutoGenerator是MyBatis-Plus的代碼生成器,通過?AutoGenerator?可以快速生成?Pojo、Mapper、?Mapper?XML、Service、Controller?等各個(gè)模塊的代碼,這篇文章主要介紹了MyBatis-Plus中AutoGenerator的詳細(xì)使用案例,需要的朋友可以參考下
    2023-05-05
  • springboot實(shí)現(xiàn)異步任務(wù)

    springboot實(shí)現(xiàn)異步任務(wù)

    這篇文章主要為大家詳細(xì)介紹了springboot實(shí)現(xiàn)異步任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • PHP Laravel實(shí)現(xiàn)文件下載功能

    PHP Laravel實(shí)現(xiàn)文件下載功能

    本文重點(diǎn)給大家介紹Laravel實(shí)現(xiàn)文件下載功能的實(shí)例代碼,需要的朋友參考下吧
    2017-09-09
  • Spring中的BeanFactory工廠詳細(xì)解析

    Spring中的BeanFactory工廠詳細(xì)解析

    這篇文章主要介紹了Spring中的BeanFactory工廠詳細(xì)解析,Spring的本質(zhì)是一個(gè)bean工廠(beanFactory)或者說bean容器,它按照我們的要求,生產(chǎn)我們需要的各種各樣的bean,提供給我們使用,需要的朋友可以參考下
    2023-12-12
  • Java中類加載過程全面解析

    Java中類加載過程全面解析

    這篇文章主要介紹了Java中類加載過程全面解析,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11

最新評論

西藏| 正安县| 辽源市| 克什克腾旗| 涞源县| 黄大仙区| 夏津县| 封开县| 泾源县| 会昌县| 长沙县| 滨海县| 睢宁县| 环江| 太仆寺旗| 柘城县| 海盐县| 延寿县| 锡林浩特市| 庆安县| 曲松县| 江西省| 崇信县| 普宁市| 会昌县| 临沧市| 镇沅| 光泽县| 杭锦旗| 婺源县| 布拖县| 旌德县| 钦州市| 昭觉县| 德格县| 卢氏县| 四子王旗| 法库县| 黄山市| 岐山县| 奉新县|