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

——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();
    }
}

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值