zoukankan      html  css  js  c++  java
  • Java 匿名内部类

    匿名内部类应该是平时我们编写代码时用得最多的,在编写事件监听的代码时使用匿名内部类不但方便,而且使代码更加容易维护。

    匿名内部类适合创建只需要一次使用的类,匿名内部类的格式:

    new 父类(参数列表) 或 父接口(){
          //匿名内部类实现部分
    }
    

    匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或实现一个接口。匿名内部类不能是抽象类。匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。

    下面这段代码是一段 Android 事件监听代码:

    scan_bt.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             
        }
    });
     
    history_bt.setOnClickListener(new OnClickListener() {
         
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             
        }
    });
    

    这段代码为两个按钮设置监听器,这里面就使用了匿名内部类。这段代码中的:

    new OnClickListener() {
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
             
        }
    }
    

    就是匿名内部类的使用。代码中需要给按钮设置监听器对象,使用匿名内部类能够在实现父类或者接口中的方法情况下同时产生一个相应的对象,但是前提是这个父类或者接口必须先存在才能这样使用。当然像下面这种写法也是可以的,跟上面使用匿名内部类达到效果相同。

    private void setListener()
    {
        scan_bt.setOnClickListener(new Listener1());       
        history_bt.setOnClickListener(new Listener2());
    }
     
    class Listener1 implements View.OnClickListener{
        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
                 
        }
    }
     
    class Listener2 implements View.OnClickListener{
        @Override
        public void onClick(View v) {
        // TODO Auto-generated method stub
                 
        }
    }
    

    这种写法虽然能达到一样的效果,但是既冗长又难以维护,所以一般使用匿名内部类的方法来编写事件监听代码。同样的,匿名内部类也是不能有访问修饰符和 static 修饰符的。

    匿名内部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名内部类的使用范围非常有限,大部分匿名内部类用于接口回调。匿名内部类在编译的时候由系统自动起名为 Outter$1.class。一般来说,匿名内部类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的实现或是重写。

  • 相关阅读:
    C语言冒泡排序例子 JIANG
    C语言技巧 JIANG
    ligerui 表格树中 Uncaught TypeError: p.tree.isParent is not a function 纵一苇之所如
    npoi 已删除的功能: /xl/styles.xml 部分的 格式 (样式) 纵一苇之所如
    超过了为 maxJsonLength 属性设置的值。 纵一苇之所如
    MySQL+Canal+RocketMQ+SpringBppt+ElasticSearch+Redis开源整合
    [开源项目发布]Observer:根据map文件测试程序在运行中各个函数的运行时间
    [工作环境搭建]笔记本与台式机共享鼠标与键盘
    探秘C++机制的实现
    自己实现函数钩子
  • 原文地址:https://www.cnblogs.com/ITHSZ/p/13933886.html
Copyright © 2011-2022 走看看