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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡(jiǎn)介

一般來說,我們創(chuàng)建類和接口的時(shí)候都是一個(gè)類一個(gè)文件,一個(gè)接口一個(gè)文件,但有時(shí)候?yàn)榱朔奖慊蛘吣承┨厥獾脑?#xff0c;java并不介意在一個(gè)文件中寫多個(gè)類和多個(gè)接口,這就有了我們今天要講的內(nèi)部類和內(nèi)部接口。

內(nèi)部類

先講內(nèi)部類,內(nèi)部類就是在類中定義的類。類中的類可以看做是類的一個(gè)屬性,一個(gè)屬性可以是static也可以是非static的。而內(nèi)部類也可以定義在類的方法中,再加上匿名類,總共有5種內(nèi)部類。

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

我們?cè)赾lass內(nèi)部定義一個(gè)static的class,如下所示:

@Slf4j public class StaticInnerClass {static class Inner {void print() {Home("Inner class is: " + this);}}public static void main(String[] args) {StaticInnerClass.Inner inner = new StaticInnerClass.Inner();inner.print();} }

因?yàn)閟tatic變量可以直接根據(jù)類名來存取,所以我們使用new StaticInnerClass.Inner()來實(shí)例化內(nèi)部類。

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

class中定義的類也可以是非靜態(tài)的,如下所示:

@Slf4j public class InnerClass {class Inner {void print() {Home("Inner class is: " + this);}}public static void main(String[] args) {InnerClass.Inner inner = new InnerClass().new Inner();inner.print();} }

要訪問到類的變量,需要實(shí)例化外部?jī)?nèi),然后再實(shí)例化內(nèi)部類:new InnerClass().new Inner()。

注意這里我們需要使用到兩個(gè)new。

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

我們可以在靜態(tài)方法中定義一個(gè)類,這個(gè)類其實(shí)就相當(dāng)于方法中的變量,這個(gè)變量當(dāng)然不能是static的。我們看下面的例子:

@Slf4j public class StaticMethodInnerClass {private static String x = "static x";public static void print() {class MyInner {public void printOuter() {Home("x is " + x);}}MyInner i = new MyInner();i.printOuter();}public static void main(String[] args) {StaticMethodInnerClass.print();} }

方法中的類,我們是無法在外部實(shí)例化的。

非靜態(tài)方法的內(nèi)部類

同樣的非靜態(tài)方法也可以定義內(nèi)部類:

@Slf4j public class MethodInnerClass {private String x = "non static x";public void print() {class MyInner {public void printOuter() {Home("x is " + x);}}MyInner i = new MyInner();i.printOuter();}public static void main(String[] args) {new MethodInnerClass().print();} }

注意,這里需要先實(shí)例化外部類才可以繼續(xù)調(diào)用。

匿名類

最后一個(gè),匿名類,直接在需要的時(shí)候?qū)嵗念悺D涿愇覀冇龅搅撕芏啻瘟?#xff0c;比如在構(gòu)建SortedSet的時(shí)候,可以傳入自定義的Comparator,我們可以用匿名類來實(shí)現(xiàn),也可以直接使用lambda表達(dá)式。

public class AnonymousClass {public static void main(String[] args) {SortedSet sortedSet1 = new ConcurrentSkipListSet(new Comparator(){@Overridepublic int compare(Object o1, Object o2) {return 0;}});SortedSet sortedSet2 = new ConcurrentSkipListSet((o1, o2) -> 0);} }

內(nèi)部接口

Inner Interface是指在接口中定義的接口。最常見的就是Map中的Entry了:

public interface Map<K, V> {interface Entry<K, V> {K getKey();}

這里的內(nèi)部接口一定是static的,因?yàn)榻涌谑遣荒軐?shí)例化的,所以為了訪問到接口中的接口,必須定義為static。如果不指定,則默認(rèn)就是static。

我們看一個(gè)該內(nèi)部接口的實(shí)現(xiàn):

public class MapImpl implements Map.Entry{@Overridepublic Object getKey() {return 0;}@Overridepublic Object getValue() {return null;}@Overridepublic Object setValue(Object value) {return null;} }

總結(jié)

本文講解了5個(gè)內(nèi)部類的實(shí)現(xiàn)和一個(gè)內(nèi)部接口的應(yīng)用。大家只要把內(nèi)部的類或者接口看成一個(gè)變量,就可以很好的理解上面的內(nèi)容了。

總結(jié)

以上是生活随笔為你收集整理的实现了某一个接口的匿名类的例子_java中的内部类内部接口详解,一文搞定的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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