今天在看模板方法设计模式的时候 发现在接口回调的时候,匿名类里面new了一个接口 。觉得很奇怪就写了个小程序测试了一下
//HibernateCallback是一个接口 public void saveUser(final User user) { execute(new HibernateCallback() { public Object doInSession(Session session) { session.save(user); return null; } }); }
下面是测试代码
public interface Interface{ void print(); } public class Test { static void updateUser() { execute(new Interface() { @Override public void print() { System.out.println("我是一个接口"); } }); } static void execute(Interface i){ i.print(); } public static void main(String[] args){ updateUser(); } }
输出结果是: 我是一个接口
匿名类的反编译文件
从反编译文件上看并不是new了一个接口, 而是这匿名类实现了接口,然后把自己当成参数传递了过去 。