內部類的定義及使用


內部類的基本概念

內部類指的是一個類的內部進行其他類嵌套的操作語法形式。理論上就跟盜墓空間一樣,一層層進行類的嵌套形式

范例:內部類的基本使用

 1 class Outer{//定義一個外部類
 2  private String msg="Hello World!";  3  //*********************
 4  class Inter{//此時定義了一個內部類
 5   public void print(){//定義一個普通方法
 6  System.out.println(msg);  7  }  8  }  9  //********************* 10  //在外部類中定義一個方法,這個方法負責產生內部類的對象和調用print();方法
11  public void fun(){ 12   Inter in=new Inter();//內部類的對象
13   in.print();//內部類提供的print()方法
14  } 15 } 16 public class Newbegin{ 17  public static void main(String args[]) { 18   Outer out=new Outer();//外部類對象
19   out.fun();//外部類方法
20  } 21 }

 

 

 

 

程序結構有點混亂!雖然內部類破壞了程序結構從整體上來講不好,但從另一個方面來說

內部類的優點在於外部類的私有訪問

范例:將以上程序的內部類提取到外部,要求實現同樣的功能

 1 class Outer{  2  private String msg="Hello World!";  3  public String getMsg(){//通過此方法才可以取得msg的內容
 4   return this.msg;  5  }  6  public void fun(){//3.現在由out對象調用了fun()方法
 7   Inter in=new Inter(this); //4.this表示當前對象,
 8   in.print();//7.調用方法
 9  } 10 } 11 class Inter{ 12  private Outer outer; 13  public Inter(Outer outer){//5.Inter.out=main.out;
14   this.outer=outer; //6.引用傳遞
15  } 16  public void print(){//8.執行此方法
17   System.out.println(this.out.getMsg()); 18  } 19 } 20 public class OuterDemo{ 21  public static void main(String args[]){ 22   Outer out=new Outer();//1.實例化Outer
23   out.fun();//2.調用Outer類方法
24  } 25 }

 

 

 

 

對內部類的操作

1.通過以上代碼可以發現,當前的內部類的訪問必須通過外部類的方法才可以完成,如果不想通過

外部類的方法調用,那么就必須按照如下形容進行創建:

語法:外部類.內部類 內部類對象=new 外部類().new 內部類(); 

class Outer{//定義一個外部類
 private String msg="Hello World!"; class Inner{//此時定義了一個內部類
  public void print(){//定義一個普通方法
 System.out.println(msg); } } } public class Newbegin{ public static void main(String args[]) { //聲明內部類對象
  Outer.Inner in=new Outer().new Inner(); in.print(); } }

 

 

1.因為外部類中有屬性,這些屬性只能實例化才能調用,

2.如果一個內部類只想被外部類使用,即:不希望直接產生內部類的實例化對象,那么可以使用private定義

 1 class Outer{//定義一個外部類
 2  private String msg="Hello World!";  3  private class Inner{//此時定義了一個內部類
 4   public void print(){//定義一個普通方法
 5  System.out.println(msg);  6  }  7  }  8  public void fun(){  9   Inner in=new Inner(); 10  in.print(); 11  } 12 } 13 public class Newbegin{ 14  public static void main(String args[]) { 15   //聲明內部類對象
16   new Outer().fun(); 17  } 18 }

 

 

 

 

3.在進行屬性訪問時要加上this. 如果想要在內部類明確的使用this

就要外部類.this.屬性表示外部類當前對象的屬性

public void print(){//定義一個普通方法
   System.out.println(Outer.this.msg);
 }

static定義內部類

 內部類中如果使用了static進行定義,那么就表示其就是一個外部類的形式,

這個外部類的名稱就是“外部類.內部類”。同時該內部類只允許訪問外部類中的static 操作, 

范例:使用static定義內部類

 

 1 class Outer{//定義一個外部類
 2  private static String msg="Hello World!";
 3  static class Inner{//內部類=“外部類”
 4   public void print(){
 5    //此時只能夠使用外部類中的static操作
 6    System.out.println(msg); 
 7   }
 8  }
 9 }
10 public class Newbegin{
11  public static void main(String args[]) {
12   Outer.Inner in=new Outer.Inner();//static來定義內部類
13   in.print();
14  }
15 }

 

 

 

外部類.內部類 內部類對象=new 外部類.內部類();

在方法中定義內部類

理論上內部類可以定義在類中的任意位置,在方法中定義內部類的形式是最多的

范例:在方法中定義內部類

 

 1 class Outer{//定義一個外部類
 2     private String msg="Hello World!";  3     public void fun(final int num){  4         class Inner{  5             public void print(){  6                 System.out.println("num="+num);  7                 System.out.println("msg="+msg);  8  }  9  } 10         new Inner().print();//產生內部類對象調用方法
11  } 12 } 13 public class Newbegin{ 14     public static void main(String args[]) { 15         new Outer().fun(100); 16  } 17 } 18 //此方法在JDk1.8是正常的,但是在JDK1.8之前就錯誤的 19 //在JDK1.7及之前,內部類要使用方法的參數,那么就必須用final定義

總結:

1.破壞了程序的結構;

2.方便進行私有屬性的訪問;不受private 限制

 

 

 

                                      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM