JAVA內部類示例分析

內部類是非常有用的類,如果該內部類只爲當前類服務,寫成內部類將是非常好的選擇,詳細看程序中的註釋:

package innerClass;

import java.util.HashMap;

public class Test1 {
	//聲明一個存儲"指令"的HashMap,根據"指令"存取不同的值
	private static HashMap hashMap=new HashMap();
	//聲明一個靜態內部類,並在內部類聲明一個抽象方法。
	private abstract static class InnerTest1{
		static {
			System.out.println("你好,InnerTest1 static");
		}
		public abstract void print(String username);
	}
	//在靜態塊中對HashMap進行初使化,靜態塊後於靜態變量初使化
	static{
		//static類加載開始執行
		System.out.println("你好,Test1 static");
		//該HaspMap存放的值是內部類,用於可以根據輸入的鍵取到結果爲InnerTest1的內部類對象
		//同時因爲InnerTest1爲抽象類,這裏新聲明的類必須繼承並實現其print方法
		hashMap.put("hello", new InnerTest1(){
			public void print(String username){
				System.out.println("你好,"+username);

			}
		}
		);
		hashMap.put("bye", new InnerTest1(){
			public void print(String username){
				System.out.println("再見,"+username);
			}
		});
	}
	//根據輸入的鍵,到HashMap中取到不同的InnerTest1內部類對象,然後就可以調用其內部的打印方法.
	public static InnerTest1 getPrinter(String param){
		Object obj=hashMap.get(param);
		if(obj!=null){
			return (InnerTest1)obj;
		}else{
			return new InnerTest1(){
				public void print(String username){
					//輸入的值爲非"hello"和"bye",在這裏處理
				}
			};
		}
	}
	public static void main(String[] args) {
		//通過從HashMap中取得對應的InnerTest1類,再調用其內部方法
		Test1.getPrinter("hello").print("張三");
		Test1.getPrinter("bye").print("李四");
		new InnerTest1(){
			public void print(String username){
				System.out.println("再見,"+username);
			}
		}.print("new 了一個內部類");
	}
}


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