黑马程序员_Java匿名内部类的应用

来源:互联网 发布:软件著作权 代码格式 编辑:程序博客网 时间:2024/06/05 03:37

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

听老师说Android里匿名内部类很常用,在做APP时,对各种事件的监听,例如点击、拖拽、按下松开等都需要用匿名内部类。所以匿名内部类一定要好好掌握!

Java 语言中,类的定义可以相互嵌套,即在一个类的定义中嵌套定义另一个类,被嵌套在内部的类称为内部类,匿名内部类就是没有名字的内部类。由于无名可用,所以不可能用匿名类声明对象,却可以直接用匿名类创建一个对象。Java 匿名内部类是在接口和抽象类的应用上发展起来的,所以匿名内部类的声明要么是基于继承的,要么是基于实现接口的。

/*   匿名内部类,没有类名   使用匿名内部类,前提,有继承父类,或者实现接口   匿名内部类,只能写方法中   匿名内部类,是一种简化形式,简化的是,类继承类或者实现接口,重写抽象方法,建立子类对象   格式     new 父类或者接口{        重写抽象方法     }.抽象方法*/interface MyInter{    public abstract void show();}class MyInterImpl implements MyInter{    public void show(){    }}/*  以上代码,是实现类,实现接口,重写方法  main中建立实现类对象  MyInterImpl my = new MyInterImpl();  my.show();  使用匿名内部类,对以上代码进行简化,一步完成*/class Outer{    public void outer(){      //使用匿名内部类,实现接口,重写方法,建立对象,调用重写方法,一步实现      new MyInter(){         public void show(){            System.out.println("匿名内部类重写方法show");         }      }.show();      //以上从new开始,到分号结束,叫做匿名内部类      //看成是接口MyInter的实现类,并且还创建出实现类对象    }}class  NiMingDemo{    public static void main(String[] args)     {        Outer o = new Outer();        o.outer();        //System.out.println("Hello World!");    }}

以上代码成功使用了匿名内部类调用了重写的接口中的方法,但是如果我地接口中有两个抽象方法呢?该怎么调用?
有人说把代码复制一下,在调用另一个方法不就好了。
可是这样做在编译后会产生两个内部类对象,怎么用一个匿名内部类调用2个方法呢?

/*  匿名内部类,简化实现类的书写*/interface MyInter{    public abstract void show();    public abstract void show2();}class Outer{    public void outer(){        //下面new开始,都是接口的实现类对象。多态        //接口引用指向自己的实现类对象==实现类是一个匿名内部类        MyInter my = new MyInter(){           public void show(){             System.out.println("匿名内部类,重写show方法");           }            public  void show2(){             System.out.println("匿名内部类,重写show2....方法");           }        };        my.show();        my.show2();    }}class NiMingDemo1 {    public static void main(String[] args)     {        new Outer().outer();    }}

没错,答案就是多态调用。
用接口引用指向自己的实现类对象(实现类是一个匿名内部类)。

0 0
原创粉丝点击