內部類

當一個對象A離開對象B就沒有存在的意義,比如:棋子與棋盤,手機充電器與手機。

沒有棋盤,棋子就沒用,沒有手機,充電器就沒用。這個時候就可以使用內部類。

棋子類可以定義在棋盤中。

包含有內部類的類叫外部類,內部類可以訪問外部類屬性(除了靜態內部類,因爲靜態內部類產生於外部類之前)。

方法級別內部類(如下前兩例),可以使用方法級別的修飾符 比如:private、public等,訪問策略與類方法相同。

方法級別內部類編譯時產生於本類加上內部類個數的class文件


例:

靜態類內部類

public class InnerClass {

	
	//靜態內部類,注意其實例化。。。
	static class A{
		void doit(int a){
			System.out.println("InnerClass is working and numuber is:"+a);
		}
	}
	
	public static void main(String[] args) {
		//靜態內部類實例化
		//與普通類的實例化差不多,可以吧InnerClass.A看做是一個類
		InnerClass.A a= new InnerClass.A();
		a.doit(3);
	}
}
實例內部類

public class InnerClass {

	//實例內部類,其實例化,必須先創建外部類實例,
	class B{
		void doit(){
			System.out.println("實例內部類工作");
		}
	}
	
	public static void main(String[] args) {
		
		//實例內部類,必須要有棋盤,纔能有棋子
		//先實例外部類,通過外部類對象新的對象類B
		InnerClass innerClass =new InnerClass();
		InnerClass.B b=innerClass.new B();
		b.doit();
		//也可示例如下
		InnerClass.B b1=new InnerClass().new B();
		b1.doit();
	}
}

局部變量級內部類

public class InnerClass {

	
	//局部變量級內部類,屬於某個方法,只在方法內有效,不能使用任何訪問修飾符,就跟局部變量一樣。
	void method(){
		class C{
			void doit(){
				System.out.println("局部變量級內部類");
			}
		}
		//調用該類(只能在方法中使用)
		C c = new C();
		c.doit();
	}
	
	public static void main(String[] args) {
			
		InnerClass innerClass1 =new InnerClass();
		innerClass1.method();
	}
}
這個寫法也會產生新的class文件

但這個寫法幾乎沒人用,只有一些職業筆試面試時好像會問到。


匿名內部類

我們給類起名是爲了什麼?

爲了可以使用這個類名創建多個實例,可是如果只需要一個實例呢?不就是不起名,直接用就好。

於是匿名內部類產生,匿名類需繼承於一個已有的父類或實現一個接口。

其實質是

class ??? extends XXXClass(){
			
	//???(無名類)實現或重寫XXXClass方法、或些自己的方法

}

定義一個無名的類繼承或實現一個已有類,重寫或實現父類方法、或寫自己的方法。

之後就簡化成

new XXXClass(){
      //方法
}
實現代碼如下
public class AnonymousClass {

	public void method(){
		System.out.println("method類使用");
	}
	
	public static void main(String[] args) {

		//匿名類也有構造方法,默認是調用父類無參構造方法,若父類沒有無參構造方法,則報錯
		//使用父類方法
		new AnonymousClass(){
			
		}.method();
		//重寫父類方法
		new AnonymousClass(){
			@Override
			public void method() {
				System.out.println("ss");
			};
		}.method();
		//實現自己方法
		new AnonymousClass(){	
			void me(){
				System.out.println("sfsf");
			}
		}.me();
	}
}



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