Java內部類與外部類你瞭解多少?

在Java中,允許在一個類的內部定義類,這樣的類稱作內部類,這個nei’bu類所在的類稱爲外部類。

	內部類的分類:
	成員內部類
	局部內部類
	靜態內部類(靜態成員內部類)
	匿名內部類

成員內部類

在一個類中,除了可以定義成員變量、成員方法,還可以定義類,這樣的類被稱作成員內部類

在成員內部類中,可以訪問外部類中的所有成員,包括成員變量與成員方法;在外部類中,同樣可以訪問成員內部類的變量與方法。

創建內部類對象的具體格式如下:

外部類名.內部類名 變量名 = new 外部類名().new 內部類名();

下面看代碼如何實現內部類與外部類的各種關係

package jiCheng_duoTai;
//不論是內部類還是外部類都會生成字節碼文件
//可以生成內部類對象也可以生成外部類對象
public class NeiBuLeiYuWaiBuLei {
  public static void main(String[] args) {
   Outer.Inner oi = new Outer().new Inner();//創建生成內部類對象
   oi.inMethod();
   //System.out.println("in:"+oi.innum);
   Outer out = new Outer();
   out.outMethod();
  }
}
class Outer{
 int num=101;
 public void outMethod() {
  System.out.println("out");
  Inner nn = new Inner();//創建內部類的對象
  System.out.println("in:"+nn.innum);
     nn.inMethod();
 }
 //Inner是成員內部類,和定義一個普通類是一樣的
 class Inner{//內部類,是在Outer這個類中寫的,所以Outer是外部類
  int innum=999;
  public void inMethod() {
   System.out.println("out:"+num);//調用外部類的成員變量,當然也可以調用外部類的成員方法
   System.out.println("in");
   //outMethod();調用外部類的成員方法。兩個方法不能互相調用( nn.inMethod();),那麼就無限循環了,要是想調用,必須有終止條件
  }
 }
}

在這裏插入圖片描述
下面的代碼也可以說明內部類與外部類之間的關係
在這裏插入圖片描述

局部內部類
在這裏插入圖片描述

靜態內部類
在這裏插入圖片描述

注意:靜態是直接通過類名進行調用的

匿名內部類
在這裏插入圖片描述

注意:匿名內部類是沒有名稱的類,所以不能通過class去創建類

通過一段代碼,看一下如何創建匿名類

package jieKou;

interface Animal {
  void shout();
}
public class Animal_NiMingLei{
 public static void main(String[] args) {
  String name="xiao花xiao花";
  //定義匿名內部類作爲參數傳給animalShout方法
  animalShout(new Animal() {//new的時候用接口的名字或者父類的名字進行創建匿名類
   public void shout() {//必須要重寫接口中的方法
    System.out.println(name+"喵喵······");
   }
  });
 }
 //定義靜態方法,接口接收類型參數
 public static void animalShout(Animal an) {
  an.shout();
 }
}

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章