日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java教程:淺談Java中的內(nèi)部類(lèi)

 好程序員IT 2019-07-10

最近在講Java中的內(nèi)部類(lèi),感覺(jué)內(nèi)部類(lèi)實(shí)際上對(duì)于初學(xué)者用得不多,那么內(nèi)部類(lèi)簡(jiǎn)單的說(shuō),其實(shí)就是在一個(gè)類(lèi)的內(nèi)部定義的類(lèi)。

按照定義的情況分為:成員內(nèi)部類(lèi),局部?jī)?nèi)部類(lèi),靜態(tài)內(nèi)部類(lèi),匿名內(nèi)部類(lèi)。

成員內(nèi)部類(lèi),就是定義一個(gè)當(dāng)作類(lèi)的成員變量的類(lèi)。

局部?jī)?nèi)部類(lèi),就是在類(lèi)里面定義一個(gè)當(dāng)作局部變量的類(lèi),通常是在方法或代碼塊中使用。

靜態(tài)內(nèi)部類(lèi),就是在類(lèi)中定義一個(gè)靜態(tài)變量,而該靜態(tài)變量是一個(gè)類(lèi)。

匿名內(nèi)部類(lèi),通常是在創(chuàng)建一個(gè)接口對(duì)象,該對(duì)象是在創(chuàng)建對(duì)象的同時(shí)實(shí)現(xiàn)接口,而該接口的實(shí)現(xiàn)只是在此處使用一次,所以不需要定義名字,稱(chēng)為匿名內(nèi)部類(lèi)。

請(qǐng)看如下代碼:

public interface MyInter{

public void method();

}

public class Outter {

// public static int i; // 普通靜態(tài)變量

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

public static class Inner3{

}

// public String name; // 普通成員變量

// 成員內(nèi)部類(lèi)

public class Inner1{

}

public void test() {

// String n; // 普通局部變量

// 局部?jī)?nèi)部類(lèi)

class Inner2{

}

// 匿名內(nèi)部類(lèi),在運(yùn)行時(shí)會(huì)生成一個(gè)臨時(shí)的名字,類(lèi)似:Outter$1.java

MyInter in = new MyInter() {

@Override

public void method() {

}

};

}

}

上面的代碼展示了4種不同的內(nèi)部類(lèi)的情形。

接下來(lái)看看這4種情形的具體用法。

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

public class Outter {

public int o1;

public static int os1;

public void om1() {

System.out.println(Inner3.ns3);

System.out.println(new Inner3().n3);

System.out.println("om1");

}

public static void oms1() {

System.out.println("oms1");

}

// public static int i;

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

public static class Inner3{

// 在靜態(tài)內(nèi)部類(lèi)中可以定義基本的成員和方法,以及靜態(tài)成員和方法

public int n3;

public static int ns3;

public void m3() {

System.out.println("m3");

}

public static void ms3() {

System.out.println(os1);

oms1();

System.out.println("ms3");

}

}

}

靜態(tài)內(nèi)部類(lèi)的使用:

public static void main(String[] args) {

  Outter.Inner3 i3 = new Outter.Inner3();

  i3.n3 = 3;

  Outter.Inner3.ns3 = 4;

  Outter.Inner3.ms3();

  i3.m3();

}

可以看到靜態(tài)內(nèi)部類(lèi)和靜態(tài)變量使用方式差不多,直接使用類(lèi)名即可。

成員內(nèi)部類(lèi):

//成員內(nèi)部類(lèi)

public class Inner1{

public int n1;

public int o1;

public void m1(int o1) {

 o1 = 1; // 局部變量

 this.o1 = 2; // 當(dāng)前屬性

 Outter.this.o1 = 4; // 外部屬性

 om1();

 System.out.println("m1");

}

}

成員內(nèi)部類(lèi)的使用:

public static void main(String[] args) {

// 調(diào)用

Outter.Inner1 i1 = new Outter().new Inner1();

i1.n1 = 3;

i1.m1(3);

}

由于是成員,所以需要先創(chuàng)建對(duì)象才能使用。

局部?jī)?nèi)部類(lèi)和匿名內(nèi)部類(lèi):相當(dāng)于局部變量,只能在方法里面調(diào)用和創(chuàng)建對(duì)象等,可以調(diào)用外部的變量和方法,外部不能調(diào)用它。請(qǐng)看如下方法:

public void test() {

// String n;

// 局部?jī)?nèi)部類(lèi)

class Inner2{

public void m2() {

o1 = 3;

}

}

Inner2 i2 = new Inner2();

i2.m2();

// 匿名內(nèi)部類(lèi),在運(yùn)行時(shí)會(huì)生成一個(gè)臨時(shí)的名字,類(lèi)似:Outter$1.java

MyInter in = new MyInter() {

@Override

public void method() {

o1 = 3;

}

};

in.method();

}

至此,內(nèi)部類(lèi)簡(jiǎn)單的使用基本就到這了。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多