从今天起开始每日一篇技术博客,固然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,但愿你们多多指教,一块儿进步!java
在讲匿名内部类以前,先讲讲内部类的一些概念。code
1.内部类:顾名思义,内部类就是写在一个类里面的类(废话),这里你们可能会问了,为何咱们不直接写一个class呢,非要写在内部。缘由很简单,内部类一方面是有很好的封装性,要经过外部类对象才能访问(具体实例见下方代码)。另外一方便定义起来很方便。最后,内部类还能够骚气地实现多重继承,由于外部类是否继承或实现一个抽象类或接口对内部类毫无影响,内部类依然能够去继承,这样是一种变相的多继承。接下来咱们看一下内部类的一个实例对象
/** @author lw */ public class InnerClassTest { class InnerClass { //public InnerClass(){} public void B() { System.out.println("这是内部类方法"); } } public static void main(String args[]) { InnerClassTest i=new InnerClassTest(); i.new InnerClass().B(); } }
从这个程序能够看到,咱们在实例化内部类时,须要借助外部类的对象,不然会报错。但若是类改成static,就能够直接调用。继承
内部类除了能够直接定义在类中,还能够定义在类的方法中,但需注意的是该类只能在本方法中实例化。接口
好了,讲了那么多废话,开始进入正题,匿名内部类!有没有很开心??==
首先仍是从概念提及,匿名内部类的两个特征,一是匿名,而是内部类(哈哈哈又是废话)。
咱们经过一个实际的例子来理解这个东西。博客
/** * @author lw * */ public interface TestInterface { public void print(); }
`class
/** * @author lw */ public class InnerClassTest { public static void main(String args[]) { TestInterface test=new TestInterface()//new一个接口很奇怪。。。 { public void print() { System.out.println("匿名内部类"); } }; test.print(); } }
这里咱们能够看到,匿名内部类的好处主要在于简化代码,用专业一点的话来讲就是写得比较优雅,若是不用匿名内部类的话咱们要实现该接口须要新建一个class,而后实现,但能够想象,若是这个类咱们只用一次呢?这样的新建class是否是彻底没有必要,用匿名类的方法就能够直接简洁地实现了。咱们须要注意的是匿名内部类必定要对应一个父类或者接口,而后在里面实现其须要的方法,额虽然在写的时候new一个接口很奇怪。。。同时咱们要明确的是匿名内部类只能用一次,不能在外部复用,因此对于屡次使用的类不能用该方法。以上都是我的理解,若有不对望指正~晚安!test