您好,登錄后才能下訂單哦!
最近在講Java中的內(nèi)部類,感覺(jué)內(nèi)部類實(shí)際上對(duì)于初學(xué)者用得不多,那么內(nèi)部類簡(jiǎn)單的說(shuō),其實(shí)就是在一個(gè)類的內(nèi)部定義的類。
按照定義的情況分為:成員內(nèi)部類,局部?jī)?nèi)部類,靜態(tài)內(nèi)部類,匿名內(nèi)部類。
成員內(nèi)部類,就是定義一個(gè)當(dāng)作類的成員變量的類。
局部?jī)?nèi)部類,就是在類里面定義一個(gè)當(dāng)作局部變量的類,通常是在方法或代碼塊中使用。
靜態(tài)內(nèi)部類,就是在類中定義一個(gè)靜態(tài)變量,而該靜態(tài)變量是一個(gè)類。
匿名內(nèi)部類,通常是在創(chuàng)建一個(gè)接口對(duì)象,該對(duì)象是在創(chuàng)建對(duì)象的同時(shí)實(shí)現(xiàn)接口,而該接口的實(shí)現(xiàn)只是在此處使用一次,所以不需要定義名字,稱為匿名內(nèi)部類。
請(qǐng)看如下代碼:
public interface MyInter{
public void method();
}
public class Outter {
// public static int i; // 普通靜態(tài)變量
// 靜態(tài)內(nèi)部類
public static class Inner3{
}
// public String name; // 普通成員變量
// 成員內(nèi)部類
public class Inner1{
}
public void test() {
// String n; // 普通局部變量
// 局部?jī)?nèi)部類
class Inner2{
}
// 匿名內(nèi)部類,在運(yùn)行時(shí)會(huì)生成一個(gè)臨時(shí)的名字,類似:Outter$1.java
MyInter in = new MyInter() {
@Override
public void method() {
}
};
}
}
上面的代碼展示了4種不同的內(nèi)部類的情形。
接下來(lái)看看這4種情形的具體用法。
靜態(tài)內(nè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)部類
public static class Inner3{
// 在靜態(tài)內(nè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)部類的使用:
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)部類和靜態(tài)變量使用方式差不多,直接使用類名即可。
成員內(nèi)部類:
//成員內(nè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)部類的使用:
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)部類和匿名內(nèi)部類:相當(dāng)于局部變量,只能在方法里面調(diào)用和創(chuàng)建對(duì)象等,可以調(diào)用外部的變量和方法,外部不能調(diào)用它。請(qǐng)看如下方法:
public void test() {
// String n;
// 局部?jī)?nèi)部類
class Inner2{
public void m2() {
o1 = 3;
}
}
Inner2 i2 = new Inner2();
i2.m2();
// 匿名內(nèi)部類,在運(yùn)行時(shí)會(huì)生成一個(gè)臨時(shí)的名字,類似:Outter$1.java
MyInter in = new MyInter() {
@Override
public void method() {
o1 = 3;
}
};
in.method();
}
至此,內(nèi)部類簡(jiǎn)單的使用基本就到這了。
免責(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)容。