日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java的内部类

發(fā)布時(shí)間:2025/3/16 java 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的内部类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)部類的概念

內(nèi)部類是定義在另一個(gè)類中的類。內(nèi)部類的作用:

  • 內(nèi)部類方法可以訪問(wèn)該類定義所在的作用域中的數(shù)據(jù),包括私有的數(shù)據(jù),
  • 內(nèi)部類可以對(duì)同一個(gè)包中的其他類隱藏起來(lái)
  • 當(dāng)想要定義一個(gè)回調(diào)函數(shù)且不想編寫大量的代碼時(shí),使用匿名內(nèi)部類比較便捷。

使用內(nèi)部類訪問(wèn)對(duì)象的狀態(tài)

public class TalkClock{private int interval;private boolean beep;public TalkingClock(int interval,boolean beep){...}public void start();public class TimePrinter implements ActionListener//一個(gè)內(nèi)部類{...} }

在上述代碼中,TimePrinter是位于TalkingClock類的內(nèi)部類。但不意味著每個(gè)TalkingClock都有一個(gè)TimerPrinter實(shí)例域。TimerPrinter是有TalkingClock類的方法構(gòu)造。下面是TimerPrinter的具體代碼

pubic class TimePrinter implements ActionLlistener{public void actionPerformed(ActionEvent event){System.out.println("At eht tone,the timer is"+new Data());if(beep)Tookit.getDefaultTookit().beep();}}

在上面的代碼中,TimePrinter的實(shí)例域中并沒有beep這個(gè)變量。它引用的是外部類的TaikingClock對(duì)象的域。也就是說(shuō),內(nèi)部類既可以訪問(wèn)自身的數(shù)據(jù)域,也可以訪問(wèn)創(chuàng)建他的外圍類對(duì)象的數(shù)據(jù)域。
內(nèi)部類的對(duì)象總有一個(gè)隱式引用,它指向了創(chuàng)建它的外部類對(duì)象。這個(gè)引用在內(nèi)部類的定義中是不可見的。這里講這個(gè)隱式引用成為outer。那么actionPerformed方法將等價(jià)于下列形式:

public void actionPerformed(ActionEvent event){System.out.println("At eht tone,the time is"+new Data());if(out.beep)Toolkit.getDefaultTookit().beep();}

內(nèi)部類對(duì)象的構(gòu)造器可以入下寫

outerObject.new InnerClass(construction parameters); ActionListener listener= this.new TimePrinter(); 在上述代碼中,在構(gòu)造TimePrinter對(duì)象的外圍類的引用被設(shè)置為創(chuàng)建內(nèi)部類對(duì)象中方法中this引用。

內(nèi)部類的聲明的所有的靜態(tài)域必須是final。因?yàn)槲覀兿M环蒽o態(tài)域只一個(gè)實(shí)例,對(duì)于每一個(gè)外部對(duì)象,會(huì)分別有一個(gè)單獨(dú)的
內(nèi)部類實(shí)例。如果這個(gè)域不是fianl,它可能不是唯一。

局部?jī)?nèi)部類

如果內(nèi)部類在代碼中只使用一次嗎,那么可以將該內(nèi)部類設(shè)計(jì)成局部?jī)?nèi)部類。具體的實(shí)現(xiàn)方法就是在該方法中實(shí)現(xiàn)該類

public void start(){class TimePrinter actionPerfoemed(ActionEvent Event){if(beep)...}

局部類不能使用private,public等修飾符來(lái)進(jìn)行聲明,他的作用怕域被限定在聲明這個(gè)局部類的塊中。

匿名內(nèi)部類

匿名內(nèi)部類是局部?jī)?nèi)部類的更深一層次。如果只創(chuàng)建這個(gè)類的一個(gè)對(duì)象,那么這個(gè)類就不用命名。 public void start(int interval,boolean beep){ActionListener listener = new ActionListener(){System.out.println("...");if(beep){....}};}

上述代碼中,含義為創(chuàng)建一個(gè)實(shí)現(xiàn)了ActionListener接口的類的新對(duì)象,需要實(shí)現(xiàn)的方法actionPerformed定義在括號(hào){}內(nèi)。通常的語(yǔ)法格式為

new SuperTyper(construction paramters){inner class method and data}

由于構(gòu)造器必須和類名一樣,而匿名類沒有名字,故而也就沒有構(gòu)造器。所以構(gòu)造器的參數(shù)都必須傳遞到超類構(gòu)造器中。在內(nèi)部類實(shí)現(xiàn)接口的時(shí)候,不能有任何構(gòu)造參數(shù)。普通類和匿名內(nèi)部類的構(gòu)造區(qū)別在于。匿名類后面會(huì)有一個(gè);
匿名內(nèi)部類常用語(yǔ)實(shí)現(xiàn)時(shí)間監(jiān)聽器和其他回調(diào)。

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

如果使用內(nèi)部類只是想把一個(gè)類隱藏于另一個(gè)類中,并不需要內(nèi)部類引用外圍類對(duì)象。那么完全可以將該類定義為靜態(tài)內(nèi)部類。

轉(zhuǎn)載于:https://www.cnblogs.com/NaCl/p/10225411.html

總結(jié)

以上是生活随笔為你收集整理的Java的内部类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。