Java---(成員、局部、靜態、匿名)內部類的特點及應用場景詳細解析

內部類

內部類的引入

  提高了類成員的安全性

內部類概述

   把類定義在類的內部,A 類中定義 B類, A類相對於B類就是外部類,B類相對於A類就是內部類

內部類分類

1.成員內部類

2.局部內部類

3.靜態內部類

4.匿名內部類

內部類特點

  1.內部類編譯後生成class文件的格式: 外部類類名$內部類類名

  2.內部類可以訪問外部類的所有成員,包括私有成員

  3.外部類訪問內部類成員,必須創建內部類對象

  4.外界訪問外部類成員,創建外部類對象,訪問內部類對象需要同時創建外部類和內部類對象

  5.內部類將類和類之間產生了關係,提高了耦合性,降低可讀性,慎用

1.成員內部類類

  概述: 把類定義在類內部的成員位置

  訪問格式:
     外部類類名.內部類類名 對象名 = new 外部類對象().new 內部類對象();

     注意: 當外部類成員名字和內部類成員名字重名的時候: 外部類類名.this.成員

代碼示例

class Fu {
	int num = 50;
	
	public void show() {
		int num = 60;
		System.out.println(num);
	}
}

class Outer2 extends Fu{
	int num = 40;
	
	// 成員內部類
	class Inner {
		int num = 30;
		
		public void show() {
			int num = 20;
			// 輸出20
			System.out.println(____);
			// 輸出30
			System.out.println(____);
			// 輸出40
			System.out.println(____); 
			// 輸出50
			System.out.println(____);
			// 輸出60
			____
		}
	}
}

2.局部內部類

  概述: 把類定義在類內部的局部位置

   理解爲局部變量即可

  訪問局部內部類成員: 局部內部類只能夠在局部創建對象來訪問

代碼示例

class Outer3 {
	
	
	public void show() {
		class InnerX {
			int num = 20;
			
			public void show() {
				System.out.println("Outer3.show().Inner.show()");
			}
		}
		
		InnerX innerX = new InnerX();
		System.out.println(innerX.num);
		innerX.show();
	}
}

3.靜態內部類

  概述:把類定義在類的內部類,並且使用static關鍵字修飾內部類

  訪問格式: 外部類類名.內部類類名 對象名 = new 外部類類名.內部類類名();

  如果在外部類訪問靜態內部類成員

     內部類靜態成員: 類名.靜態成員

    內部類非靜態成員: 對象.非靜態成員

   如何在外界訪問靜態內部類成員

     創建靜態內部類對象格式:
       外部類.內部類 對象名 = new 外部類.內部類();

     訪問靜態內部類非靜態成員
       對象.非靜態成員

     訪問靜態內部類靜態成員
       對象.靜態成員
       外部類類名.靜態內部類類名.靜態成員
代碼示例

public class InnerClassDemo05 {
	public static void main(String[] args) {
		Outer4 outer4 = new Outer4();
		outer4.test();
		
		Outer4.Inner oi = new Outer4.Inner();
		System.out.println(oi.num);
//		System.out.println(oi.num2);
		System.out.println(Outer4.Inner.num2);
		oi.show();
		Outer4.Inner.staticMethod();
	}
}

class Outer4 {
	
	static String country;
	
	static class Inner {
		int num = 10;
		static int num2 = 20;
		
		public void show() {
			System.out.println("show");
		}
		
		public static void staticMethod() {
			System.out.println("staticMethod");
		}
	}
	
	public void test() {
		System.out.println(Inner.num2);
		Inner inner = new Inner();
		System.out.println(inner.num);
	}
}

4.匿名內部類

  概述

  這個本質就是 一個 繼承/實現了某個類(接口,普通類,抽象類)的子類匿名對象

  該類沒有類名, 類名叫做 外部類類名$數字

  格式 :

   new 類名() {
     [重寫方法;]
   };

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