Java匿名内部类

来源:互联网 发布:淘宝忘记密码怎么办 编辑:程序博客网 时间:2024/06/01 07:22

匿名内部类

           要讲匿名内部类首先要了解什么是内部类,内部类简单来说就是在某个类的内部又定义了一个类,没有名字的内部类就叫匿名内部类。匿名内部类因为没有名字,所以只能使用一次,主要用来简化代码,使用匿名内部类的一个前提条件是:必须继承一个父类或者实现一个接口。

匿名内部类的实现格式

格式一:
new 类A(){     方法体}
此时产生的是类A的子类对象,如果类A是只含有带参数构造方法的类,在括号里必须带上这些参数
格式二:
new 接口A(){        方法体}
此时产生的是接口A的实现对象

不使用匿名内部类实现抽象方法:

abstract class Fruit {    public abstract void eat();} class Apple extends Fruit {    public void eat() {        System.out.println("can eat");    }} public class Demo {    public static void main(String[] args) {        Fruit f = new Apple();        f.eat();    }}
      可以看出,Apple类继承了抽象类Fruit,然后产生Apple的一个实例,将其向上转型为Fruit的引用,但是此时Apple类只使用一次,独立编写一个类比较麻烦。这时候就可以使用匿名内部类。

使用匿名内部类实现抽象方法

abstract class Fruit {    public abstract void eat();} public class Demo {    public static void main(String[] args) {        Fruit f = new Fruit() {            public void eat() {                System.out.println("can eat");            }        };        f.eat();    }}
        使用匿名内部类将抽象类Fruit的方法在大括号中实现,就可以省略一个类的书写。

在接口使用匿名内部类

interface Person {    public void eat();} public class Demo {    public static void main(String[] args) {        Person p = new Person() {            public void eat() {                System.out.println("eat something");            }        };        p.eat();    }}
      在接口上也可以使用匿名内部类,从上面几个例子可以看出,只要一个类是抽象的或是一个接口,那么其子类的方法都可以使用匿名内部类来实现,最常见的是在多线程的实现上,因为要实现多线程必须继承Tread类或继承Runnable接口。

使用匿名内部类注意事项:

       1、匿名内部类不能有构造方法,但是如果这个匿名内部类继承了一个只含有带参数构造方法的父类,在创建它的对象的时候,在括号中必须带上这些参数;
       2、匿名内部类不能定义任何静态成员和方法;
       3、匿名内部类不能被public、protect、private、static修饰;
       4、只能创建匿名内部类的一个实例。

匿名内部类的使用条件:

      1、只用到类的一个实例;
      2、类在定义后马上用到;
      3、类非常小。








原创粉丝点击