淺談Java中的內部類

好程式設計師IT發表於2019-07-10

最近在講Java中的內部類,感覺內部類實際上對於初學者用得不多,那麼內部類簡單的說,其實就是在一個類的內部定義的類。

按照定義的情況分為:成員內部類,區域性內部類,靜態內部類,匿名內部類。

成員內部類,就是定義一個當作類的成員變數的類。

區域性內部類,就是在類裡面定義一個當作區域性變數的類,通常是在方法或程式碼塊中使用。

靜態內部類,就是在類中定義一個靜態變數,而該靜態變數是一個類。

匿名內部類,通常是在建立一個介面物件,該物件是在建立物件的同時實現介面,而該介面的實現只是在此處使用一次,所以不需要定義名字,稱為匿名內部類。

請看如下程式碼:

public interface MyInter{

public void method();

}


public class Outter {

// public static int i; // 普通靜態變數

// 靜態內部類

public static class Inner3{

}

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

// 成員內部類

public class Inner1{

}


public void test() {

// String n; // 普通區域性變數

// 區域性內部類

class Inner2{

}

// 匿名內部類,在執行時會生成一個臨時的名字,類似:Outter$1.java

MyInter in = new MyInter() {

@Override

public void method() {

}

};

}

}


上面的程式碼展示了4種不同的內部類的情形。

接下來看看這4種情形的具體用法。


靜態內部類:

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;

// 靜態內部類

public static class Inner3{

// 在靜態內部類中可以定義基本的成員和方法,以及靜態成員和方法

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");

}

}

}


靜態內部類的使用:

public static void main(String[] args) {

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

  i3.n3 = 3;

  Outter.Inner3.ns3 = 4;

  Outter.Inner3.ms3();

  i3.m3();

}

可以看到靜態內部類和靜態變數使用方式差不多,直接使用類名即可。


成員內部類:

//成員內部類

public class Inner1{

public int n1;

public int o1;

public void m1(int o1) {

o1 = 1; // 區域性變數

this.o1 = 2; // 當前屬性

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

om1();

System.out.println("m1");

}

}


成員內部類的使用:

public static void main(String[] args) {

// 呼叫

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

i1.n1 = 3;

i1.m1(3);

}

由於是成員,所以需要先建立物件才能使用。


區域性內部類和匿名內部類:相當於區域性變數,只能在方法裡面呼叫和建立物件等,可以呼叫外部的變數和方法,外部不能呼叫它。請看如下方法:

public void test() {

// String n;

// 區域性內部類

class Inner2{

public void m2() {

o1 = 3;

}

}

Inner2 i2 = new Inner2();

i2.m2();


// 匿名內部類,在執行時會生成一個臨時的名字,類似:Outter$1.java

MyInter in = new MyInter() {

@Override

public void method() {

o1 = 3;

}

};

in.method();

}

至此,內部類簡單的使用基本就到這了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2650123/,如需轉載,請註明出處,否則將追究法律責任。

相關文章