溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何搞懂Java內(nèi)部類

發(fā)布時(shí)間:2022-02-28 11:27:21 來(lái)源:億速云 閱讀:151 作者:小新 欄目:web開發(fā)

小編給大家分享一下如何搞懂Java內(nèi)部類,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

  根據(jù)定義的方式不同,內(nèi)部類分為靜態(tài)內(nèi)部類、成員內(nèi)部類、局部?jī)?nèi)部類、匿名內(nèi)部類四種。

  1.靜態(tài)內(nèi)部類

  定義在類內(nèi)部的靜態(tài)類,就是靜態(tài)內(nèi)部類。

  publicclassOut{

  privatestaticinta;

  privateintb;

  publicstaticclassInner{

  publicvoidprint(){

  System.out.println(a);

  }

  }

  }

  1)靜態(tài)內(nèi)部類可以訪問(wèn)外部類所有的靜態(tài)變量和方法,即使是private的也一樣。

 ?。ㄍ扑]視頻:java視頻教程)

  2)靜態(tài)內(nèi)部類和一般類一致,可以定義靜態(tài)變量、方法、構(gòu)造方法等。

  3)其他類使用靜態(tài)內(nèi)部類需要使用“外部類.靜態(tài)內(nèi)部類”方式。如下所示:Out.Innerinner=newOut.Inner();inner.print();

  4)Java集合類HashMap內(nèi)部就有一個(gè)靜態(tài)內(nèi)部類Entry。Entry是HashMap存放元素的抽象,HashMap內(nèi)部維護(hù)Entry數(shù)組用來(lái)存放元素,但是Entry對(duì)使用者是透明的。像這種和外部類關(guān)系密切的,且不依賴外部類實(shí)例的,都可以使用靜態(tài)內(nèi)部類。

  2.成員內(nèi)部類

  定義在類內(nèi)部的非靜態(tài)類,就是成員內(nèi)部類。成員內(nèi)部類不能定義靜態(tài)方法和變量(final修飾的除外)。這是因?yàn)槌蓡T內(nèi)部類是非靜態(tài)的,類初始化的時(shí)候先初始化靜態(tài)成員,如果允許成員內(nèi)部類定義靜態(tài)變量,那么成員內(nèi)部類的靜態(tài)變量初始化順序是有歧義的。

  publicclassOut{

  privatestaticinta;

  privateintb;

  publicclassInner{

  publicvoidprint(){

  System.out.println(a);

  System.out.println(b);

  }

  }

  }

  3.局部?jī)?nèi)部類(定義在方法中的類)

  定義在方法中的類,就是局部類。如果一個(gè)類只在某個(gè)方法中使用,則可以考慮使用局部類。

  publicclassOut{

  privatestaticinta;

  privateintb;

  publicvoidtest(finalintc){

  finalintd=1;

  classInner{

  publicvoidprint(){

  System.out.println(c);

  }

  }

  }

  }

  4.匿名內(nèi)部類(要繼承一個(gè)父類或?qū)崿F(xiàn)一個(gè)接口、直接使用new來(lái)生成一個(gè)對(duì)象的引用)

  匿名內(nèi)部類,我們必須要繼承一個(gè)父類或?qū)崿F(xiàn)一個(gè)接口,當(dāng)然也僅能只繼承一個(gè)父類或?qū)崿F(xiàn)一個(gè)接口。同時(shí)它也是沒(méi)有class關(guān)鍵字,這是因?yàn)槟涿麅?nèi)部類是直接使用new來(lái)生成一個(gè)對(duì)象的引用。

  1)匿名內(nèi)部類僅能被使用一次,創(chuàng)建匿名內(nèi)部類時(shí),它會(huì)立即創(chuàng)建一個(gè)該類的實(shí)例,該類的定義會(huì)立即消失,所以匿名內(nèi)部類時(shí)不能夠被重復(fù)使用的。

  2)匿名內(nèi)部類不能定義構(gòu)造函數(shù),不能存在任何的靜態(tài)成員變量和靜態(tài)方法。

  3)匿名內(nèi)部類中的方法不能是抽象的,它必須要實(shí)現(xiàn)接口或繼承父類的所有抽象方法。

  4)匿名內(nèi)部類訪問(wèn)的外部類成員變量或成員方法必須用static修飾,內(nèi)部類可以訪問(wèn)外部類私有變量和方法。

  publicabstractclassBird{

  privateStringname;

  publicStringgetName(){

  returnname;

  }

  publicvoidsetName(Stringname){

  this.name=name;

  }

  publicabstractintfly();

  }

  publicclassTest{

  publicvoidtest(Birdbird){

  System.out.println(bird.getName()+"能夠飛"+bird.fly()+"米");

  }

  publicstaticvoidmain(String[]args){

  Testtest=newTest();

  test.test(newBird(){

  publicintfly(){

  return10000;

  }

  publicStringgetName(){

  return"大雁";

  }

  });

  }

  }

以上是“如何搞懂Java內(nèi)部類”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI