#随笔之java匿名内部类

随笔之java匿名内部类

从今天起开始每日一篇技术博客,固然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,但愿你们多多指教,一块儿进步!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,就能够直接调用。继承

内部类除了能够直接定义在类中,还能够定义在类的方法中,但需注意的是该类只能在本方法中实例化。接口

好了,讲了那么多废话,开始进入正题,匿名内部类!有没有很开心??==
首先仍是从概念提及,匿名内部类的两个特征,一是匿名,而是内部类(哈哈哈又是废话)。
咱们经过一个实际的例子来理解这个东西。博客

TestInterface接口

/**
 * @author lw *  */
public interface TestInterface {
    public void print();
}

InnerClassTest.class(和内部类名字同样,偷了个懒)

`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

相关文章
相关标签/搜索