内部类是非常有用的类,如果该内部类只为当前类服务,写成内部类将是非常好的选择,详细看程序中的注释:
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 了一个内部类");
}
}