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

淺析Java內(nèi)部類——成員內(nèi)部類

 更新時(shí)間:2020年08月21日 10:17:55   作者:弗蘭克的貓  
這篇文章主要介紹了Java 成員內(nèi)部類的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java 內(nèi)部類的相關(guān)知識(shí),感興趣的朋友可以了解下

  內(nèi)部類是什么,簡單來說,就是定義在類內(nèi)部的類(一本正經(jīng)的說著廢話)。

  一個(gè)正經(jīng)的內(nèi)部類是長這樣的:

public class Outer {
  class Inner{
  }
}

  這是為了演示而寫的類,沒有什么luan用,可以看到Inner類置于Outer類的內(nèi)部。

  那為什么要大費(fèi)周章的在類內(nèi)部定義一個(gè)類呢?不能在類外部定義類嗎?內(nèi)部類跟外部類有什么關(guān)系?

  確實(shí),很多時(shí)候,在外部單獨(dú)定義一個(gè)類確實(shí)更加方便,也更加通用,但內(nèi)部類的存在自然有其存在的道理,內(nèi)部類作為寄生在外部類的類,可以自由訪問內(nèi)部類的所有的屬性和方法,有沒有聯(lián)想其我們之前說的繼承,子類可以繼承父類的屬性和方法,但是內(nèi)部類有著更高的訪問權(quán)限,不僅是public屬性,protected屬性,就連private屬性也可以輕松訪問,這樣就不會(huì)讓修飾符限制你的想象了(手動(dòng)滑稽)。

  內(nèi)部類也分很多種:成員內(nèi)部類、靜態(tài)內(nèi)部類、局部內(nèi)部類、匿名內(nèi)部類。今天先來說說第一種:成員內(nèi)部類。

  成員內(nèi)部類是最簡單粗暴的內(nèi)部類,上面那個(gè)栗子中的Inner類就是成員內(nèi)部類,相比普通的類,成員內(nèi)部類是不能有static修飾的成員或者方法的,因?yàn)槌蓡T內(nèi)部類是寄生在外部類中的,所以必須先有外部類實(shí)例才能有成員內(nèi)部類。在外部創(chuàng)建內(nèi)部類對(duì)象時(shí),姿勢也不太一樣,看起來像是這個(gè)樣子的:

public class Test {
  public static void main(String[] args) {
    Outer.Inner inner = new Outer().new Inner();
  }
}

  在內(nèi)部類中可以訪問外部類的方法和屬性,外部類也可以訪問內(nèi)部類的方法和屬性,舉個(gè)栗子:

public class Outer {
  private int num;
  private Inner inner;

  Outer(){
    num = 1;
    inner = new Inner();
  }

  public void print(){
    System.out.println("Outer.print()");
    System.out.println(inner.num);
    System.out.println(num);
  }

  class Inner{
    private int num;

    Inner(){
      num = 2;
    }

    public void print(){
      System.out.println("Inner.print()");
      System.out.println(this.num);
      System.out.println(Outer.this.num);
    }
  }
}
public class Test {
  public static void main(String[] args) {
    Outer outer = new Outer();
    Outer.Inner inner = outer.new Inner();
    outer.print();
    inner.print();
  }
}

  輸出如下:

Outer.print()
3
1
Inner.print()
3
1

  外部類訪問內(nèi)部類的姿勢是先生成內(nèi)部類實(shí)例,然后就能訪問所有方法和屬性,內(nèi)部類訪問外部類方法和屬性則直接使用Outer.屬性/方法名 即可。

  在這個(gè)栗子中,我們可以看到內(nèi)部了Inner可以對(duì)外圍類Outer的屬性進(jìn)行無限制的訪問,盡管它是private修飾的。因?yàn)楫?dāng)我們?cè)趧?chuàng)建某個(gè)外圍類的內(nèi)部類對(duì)象時(shí),會(huì)往內(nèi)部類傳入一個(gè)外部類的引用,只要我們?cè)谠L問外部類的成員時(shí),就會(huì)用這個(gè)引用來選擇外圍類的成員。引用內(nèi)部類的時(shí)候,需要使用Outer.Inner這樣的形式來聲明,而不能直接使用Inner來聲明(除了在Outer類中),當(dāng)需要使用到內(nèi)部類的時(shí)候,還是推薦使用getInnerInstance的方式來獲取,特別是當(dāng)內(nèi)部類只有無參構(gòu)造器的時(shí)候:

public class Outer {
  private int num;
  private Inner inner;

  Outer(){
    num = 1;
    inner = new Inner();
  }

  public Inner getInnerInstance() {
    return new Inner();
  }

  public void print(){
    System.out.println("Outer.print()");
    System.out.println(inner.num);
    System.out.println(num);
  }

  public class Inner{
    private int num;

    Inner(){
      num = 2;
    }

    public void print(){
      System.out.println("Inner.print()");
      System.out.println(this.num);
      System.out.println(Outer.this.num);
    }
  }
}
public class Test {
  public static void main(String[] args) {
    Outer outer = new Outer();
    Outer.Inner inner = outer.getInnerInstance();
    outer.print();
    inner.print();
  }
}

  這樣的話,就能更好的封裝了。

  當(dāng)然,內(nèi)部類跟外部類還有一個(gè)很重要區(qū)別:內(nèi)部類可以用private修飾,而外部類是不能使用private修飾的。如果內(nèi)部類僅僅在類內(nèi)部使用時(shí),使用private修飾后,就可以更好的隱藏內(nèi)部信息。

  至此,內(nèi)部類的第一部分講解完畢,歡迎大家繼續(xù)關(guān)注。

以上就是淺析Java內(nèi)部類——成員內(nèi)部類的詳細(xì)內(nèi)容,更多關(guān)于Java 成員內(nèi)部類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mybatis-generator-gui根據(jù)需求改動(dòng)示例

    mybatis-generator-gui根據(jù)需求改動(dòng)示例

    這篇文章主要為大家介紹了mybatis-generator-gui根據(jù)需求改動(dòng)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • 一篇文章帶你了解Java SpringMVC返回null

    一篇文章帶你了解Java SpringMVC返回null

    這篇文章主要介紹了Spring MVC返回null,文中講的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-10-10
  • 深入了解SpringBoot中@InitBinder注解的使用

    深入了解SpringBoot中@InitBinder注解的使用

    這篇文章主要介紹了深入了解SpringBoot中@InitBinder注解的使用,@InitBinder注解可以作用在被@Controller注解的類的方法上,表示為當(dāng)前控制器注冊(cè)一個(gè)屬性編輯器,用于對(duì)WebDataBinder進(jìn)行初始化,且只對(duì)當(dāng)前的Controller有效,需要的朋友可以參考下
    2023-10-10
  • Java 生成隨機(jī)單據(jù)號(hào)的實(shí)現(xiàn)示例

    Java 生成隨機(jī)單據(jù)號(hào)的實(shí)現(xiàn)示例

    本文主要介紹了Java 生成隨機(jī)單據(jù)號(hào)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Java常用鎖synchronized和ReentrantLock的區(qū)別

    Java常用鎖synchronized和ReentrantLock的區(qū)別

    這篇文章主要介紹了Java常用鎖synchronized和ReentrantLock的區(qū)別,二者的功效都是相同的,但又有很多不同點(diǎn),下面我們就進(jìn)入文章了解具體的相關(guān)內(nèi)容吧。需要的小伙伴也可以參考一下
    2022-05-05
  • SpringBoot中的PropertySource原理詳解

    SpringBoot中的PropertySource原理詳解

    這篇文章主要介紹了SpringBoot中的PropertySource原理詳解,PropertySource?是一個(gè)非常重要的概念,它允許您在應(yīng)用程序中定義屬性,并將這些屬性注入到?Spring?環(huán)境中,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)簡單的彈球游戲

    Java實(shí)現(xiàn)簡單的彈球游戲

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單的彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Mybatis的@select和@SelectProvider注解方式動(dòng)態(tài)SQL語句解讀

    Mybatis的@select和@SelectProvider注解方式動(dòng)態(tài)SQL語句解讀

    這篇文章主要介紹了Mybatis的@select和@SelectProvider注解方式動(dòng)態(tài)SQL語句,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 一篇文章帶你入門Java繼承

    一篇文章帶你入門Java繼承

    這篇文章主要介紹了Java繼承概念詳細(xì)解讀,涉及繼承的概念,合成的語法等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 整合線程池的示例詳解

    SpringBoot 整合線程池的示例詳解

    線程池是一種利用池化技術(shù)思想來實(shí)現(xiàn)的線程管理技術(shù),主要是為了復(fù)用線程、便利地管理線程和任務(wù)、并將線程的創(chuàng)建和任務(wù)的執(zhí)行解耦開來,這篇文章主要介紹了SpringBoot 整合線程池的示例詳解,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

八宿县| 平陆县| 资溪县| 基隆市| 舞阳县| 绍兴市| 娱乐| 都安| 永平县| 惠来县| 册亨县| 萍乡市| 巴里| 正宁县| 龙陵县| 江陵县| 三江| 白沙| 沙坪坝区| 固始县| 夹江县| 安阳市| 肇东市| 全州县| 麻阳| 北安市| 封丘县| 巴马| 青浦区| 旬阳县| 永城市| 四川省| 乐都县| 唐海县| 庆元县| 胶州市| 会同县| 来凤县| 安国市| 莆田市| 诸暨市|