使用接口创建出来的而非使用类实现接口出来的就是匿名类了。 因为接口是无法new的,而使用接口new对象实际是就是产生了一个没有进行命名的类,而这种类就叫做匿名类了。 interface Abc{ public void fn(); } class Test{ void fn(){ //这里的new Abc()就是一个匿名类,由接口直接产生,而未通过class XXX implements Abc得到 new Abc(){ public void fn(){} } } }内部类实际上就是在一个类中定义了一种新的数据类型,当这种数据类型没有被使用时,JVM不会加载它,换句话说,内部类也是一种类,不使用就不加载,只不过它的格式特殊一些而已,单从JAVA编译后的形态来看,内部类独立成一个.class文件,只不过类名是:外部类名$内部类名.class。所以内部类操作时和普通类是一样的,完全满足普通类的各种加载释放原理。