內部類是非常有用的類,如果該內部類只爲當前類服務,寫成內部類將是非常好的選擇,詳細看程序中的註釋:
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 了一個內部類");
}
}