內部類總結

一、內部類的分類:
	1、靜態內部類
	2、非靜態內部類
		1)、成員內部類
		2)、方法內部類:在外部類的方法或者代碼塊中定義內部類
		3)、匿名內部類
	注意:1、內部類任然是一個獨立的類,編譯形成.class文件,只是在前面加上
			 外部類名和$符號。
		  2、內部類也可以使用修飾符:private、protected、default、public
		  3、內部類的定義大多數情況下僅僅是爲了讓外部類使用。
		  4、匿名內部類多數情況下放在方法裏面,因此它既是匿名內部類,又是方法內部類。


二:靜態內部類:
	1、靜態內部類中可以包含靜態的內部成員,也可以包含非靜態的內部成員。
	2、靜態內部類可以直接調用外類的靜態屬性和方法,但不能調用非靜態的屬性和方法。
	3、再不相關的類中可以直接創建靜態內部類的對象,無需經過外部類。
	4、靜態內部類實際上和外部類聯繫很少,只是在命名空間上的聯繫。
	
	5、成員內部類的創建方式:
		1)Outer.Inner in = new Outer.Inner();
		2)Inner in = new Inner()
		建議採用第一種方式。
	
三:成員內部類:
	1、成員內部類就像是外部類的一個屬性一樣
	2、成員內部類可以訪問外部類的所有成員(包括private型)
	3、成員內部類中的this指的是內部類的對象,獲得外部類對象:外部類名+.this
	4、成員內部類不能有靜態成員(除非聲明爲final常量)
		final static int d = 80;// 可以
		final static Date d2 = new Date();// 不可以
	5、成員內部類綁定到外部類上,要利用內部類,先要獲得內部類。
	
	
	6、成員內部類的創建方式:
		Outer outer = new Outer;
		Outer.Inner inner = Outer.new Inner();
		
		上面也可以直接寫爲:Outer.Inner inner = new Outer().new Inner();
		
四:方法內部類:
	1、方法內部類的地位與方法內部的局部變量類似,因此不能修飾局部變量的修飾符也不能修飾
		方法內部類,如:public、private、protected、static、transient
	2、方法內部類只能在聲明的方法內可見,因此定義局部內部類後,想用的話要在方法內直接
		實例化,記住這裏順序一定不能反,先聲明,後使用。
	3、方法內部類不能訪問定義它的方法內的局部變量,除非這個變量被定義爲final。
	   本質原因:局部變量和方法內部類生命週期不一致所致。
	4、方法內部類只能包含非靜態成員。


五:匿名內部類:
	根據聲明的位置,判斷匿名內部類是成員內部類還是方法內部內。
	注:一般是方法內部類,這就具備了方法內部類的特性。
		匿名內部類只能使用一次。
	
	三種使用方式:
	1、繼承式
	2、接口式
	3、參數式
關於匿名內部類的代碼實例:
package com.chen.Anonymous_Inner_Class;
/**
 * 測試匿名內部類
 * 1、繼承式
 * 2、接口式
 * 3、參數式
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) {
		
		Outer05 outer = new Outer05();
		
		outer.test();
		
		// 3、參數式
		outer.test02(new Car() {
			
			@Override
			public void run() {

				System.out.println("我的車再跑!");
			}
		});
	}
	
}

class Outer05 {
	
	// 2、接口式
	Runnable runnable = new Runnable(){
		
		@Override
		public void run() {
			// TODO Auto-generated method stub
			
		}
	};
	
	// 1、繼承式
	public void test() {
		
		Car car = new Car(){
			
			@Override
			public void run() {

				System.out.println("子類的汽車再跑!");
			}
		};
		car.run();
	}
	
	// 3、參數式
	public void test02(Car car) {
		
		car.run();
	}
}


class Car {
	
	public void run() {
		
		System.out.println("汽車再跑!");
	}
}


發佈了44 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章