摘要:中的匿名內(nèi)部類總結(jié)實(shí)例不使用匿名內(nèi)部類來實(shí)現(xiàn)抽象方法運(yùn)行結(jié)果可以看到,我們用繼承了類,然后實(shí)現(xiàn)了的一個(gè)實(shí)例,將其向上轉(zhuǎn)型為類的引用但是,如果此處的類只使用一次,那么將其編寫為獨(dú)立的一個(gè)類豈不是很麻煩這個(gè)時(shí)候就引入了匿名內(nèi)部類實(shí)例匿名內(nèi)部類的
java中的匿名內(nèi)部類總結(jié)
實(shí)例1:不使用匿名內(nèi)部類來實(shí)現(xiàn)抽象方法
abstract class Person { public abstract void eat(); } class Child extends Person { public void eat() { System.out.println("eat something"); } } public class Demo { public static void main(String[] args) { Person p = new Child(); p.eat(); } }
運(yùn)行結(jié)果:eat something
可以看到,我們用Child繼承了Person類,然后實(shí)現(xiàn)了Child的一個(gè)實(shí)例,將其向上轉(zhuǎn)型為Person類的引用
但是,如果此處的Child類只使用一次,那么將其編寫為獨(dú)立的一個(gè)類豈不是很麻煩?
這個(gè)時(shí)候就引入了匿名內(nèi)部類
實(shí)例2:匿名內(nèi)部類的基本實(shí)現(xiàn)
abstract class Person { public abstract void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
運(yùn)行結(jié)果:eat something
可以看到,我們直接將抽象類Person中的方法在大括號(hào)中實(shí)現(xiàn)了
這樣便可以省略一個(gè)類的書寫
并且,匿名內(nèi)部類還能用于接口上
實(shí)例3:在接口上使用匿名內(nèi)部類
interface Person { public void eat(); } public class Demo { public static void main(String[] args) { Person p = new Person() { public void eat() { System.out.println("eat something"); } }; p.eat(); } }
運(yùn)行結(jié)果:eat something
由上面的例子可以看出,只要一個(gè)類是抽象的或是一個(gè)接口,那么其子類中的方法都可以使用匿名內(nèi)部類來實(shí)現(xiàn)
最常用的情況就是在多線程的實(shí)現(xiàn)上,因?yàn)橐獙?shí)現(xiàn)多線程必須繼承Thread類或是繼承Runnable接口
實(shí)例4:Thread類的匿名內(nèi)部類實(shí)現(xiàn)
public class Demo { public static void main(String[] args) { Thread t = new Thread() { public void run() { for (int i = 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); } } 運(yùn)行結(jié)果:1 2 3 4 5
實(shí)例5:Runnable接口的匿名內(nèi)部類實(shí)現(xiàn)
public class Demo { public static void main(String[] args) { Runnable r = new Runnable() { public void run() { for (int i = 1; i <= 5; i++) { System.out.print(i + " "); } } }; Thread t = new Thread(r); t.start(); } }
運(yùn)行結(jié)果:1 2 3 4 5
注明:摘選自博客:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/65927.html
摘要:每個(gè)內(nèi)部類都能獨(dú)立地繼承一個(gè)接口,而無論外部類是否已經(jīng)繼承了某個(gè)接口。因此,內(nèi)部類使多重繼承的解決方案變得更加完整。內(nèi)部類中的與其他類一樣是指的本身。但是靜態(tài)內(nèi)部類卻沒有。 問題:內(nèi)部類、靜態(tài)內(nèi)部類區(qū)別、使用場(chǎng)景? 1.靜態(tài)內(nèi)部類可以有靜態(tài)成員(方法,屬性),而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員(方法,屬性)。 2.靜態(tài)內(nèi)部類只能夠訪問外部類的靜態(tài)成員,而非靜態(tài)內(nèi)部類則可以訪問外部類的所有...
摘要:方法內(nèi)部類就是局部內(nèi)部類,一般定義在類的局部位置,它可以訪問當(dāng)前代碼塊及外部類的所有變量。 今天溫習(xí)一下 Java 中的內(nèi)部類,內(nèi)部類一般有如下幾種:靜態(tài)內(nèi)部類、成員內(nèi)部類、匿名內(nèi)部類和方法內(nèi)部類,下文中將主要介紹靜態(tài)內(nèi)部類和成員內(nèi)部類,主要內(nèi)容如下: 概述 靜態(tài)內(nèi)部類 成員內(nèi)部類 匿名內(nèi)部類和方法內(nèi)部類 總結(jié) 概述 顧名思義內(nèi)部類就是在一個(gè)類內(nèi)部定義的類,它是內(nèi)部類是一個(gè)獨(dú)立的類...
摘要:對(duì)于一個(gè)名為的外圍類和一個(gè)的內(nèi)部類,在編譯成功后,會(huì)出現(xiàn)這樣兩個(gè)文件和。 Java知識(shí)點(diǎn)總結(jié)(三個(gè)步驟) @(Java知識(shí)點(diǎn)總結(jié))[Java, Java面向?qū)ο骫 [toc] 1-定義類 修飾符 訪問修飾符: public protected default private 其他修飾符 abstract:抽象類不能實(shí)例化,專門用于繼承的類final:最終類不能被繼承 類名(駝峰命名...
摘要:要注意的是,成員內(nèi)部類不能含有的變量和方法。匿名內(nèi)部類是唯一一種沒有構(gòu)造器的類。靜態(tài)嵌套類又叫靜態(tài)局部類嵌套內(nèi)部類,就是修飾為的內(nèi)部類。以上是對(duì)內(nèi)部類的一些學(xué)習(xí)和總結(jié),紕漏之處希望各位小伙伴友情指點(diǎn),共同進(jìn)步。 內(nèi)部類(inner class)是定義在另一個(gè)類中的類,類名不需要和文件夾相同。但為什么要使用內(nèi)部類呢?其主要原因有以下三點(diǎn): 1.內(nèi)部類方法可以訪問該類定義所在的作用域中的...
閱讀 2856·2021-11-23 09:51
閱讀 2476·2021-09-30 09:48
閱讀 2123·2021-09-22 15:24
閱讀 1079·2021-09-06 15:02
閱讀 3437·2021-08-17 10:14
閱讀 2004·2021-07-30 18:50
閱讀 2038·2019-08-30 15:53
閱讀 3258·2019-08-29 18:43