• 匿名类和匿名对象


    https://blog.csdn.net/qq_39728125/article/details/77119736

    匿名类和匿名对象

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39728125/article/details/77119736

    匿名类和匿名对象


    在Java中有匿名类和匿名对象的概念,有名字可知他们是因为没有名字二指定为匿名类的。

    匿名类

    匿名类(也叫匿名内部类)他是内部类的一种。匿名类在类中只能使用一次,它通常用来简化代码的编写,但使用匿名类还有一个前提条件:它必须继承一个父类或者一个接口,因此这个匿名类会被默认为这个父类或者接口的子类或实现类。如:

    //这是一个简单的接口
    public interface IPresenter {
        void run();
    }
    
    //这是另外一个类
    public class Presenter {
        //使用了接口的对象作为方法的参数,然后返回接口的对象
        public IPresenter getiPresenter(IPresenter iPresenter) {
            return iPresenter;
        }
    }
    
    //Convey类来操作上面的类和接口
    public class Convey {
        //定义Presenter对象
        private Presenter presenter = new Presenter();
    
    
        public void setiPresenter() {
            //一个接口的局部变量
            IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
            //在这里定义一个接口的实现匿名类
    
                @Override
                public void run() {
                    // 实现接口的方法
                }
            });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在Java中这种匿名类很常见,例如:

    new Button().setOnClickListener(new OnClickListener() { 
    
        //定义了一个实现事件监听的匿名类
        @Override 
        public void onClick(View v) { //实现OnClickListener中的方法
    
            new Thread() { 
                //定义了一个实现Thread的匿名类
                @Override 
                public void run() {  } 
            }.start(); 
        } 
    }); 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    匿名对象

    匿名对象也是Java中比较常见的实例化对象方式,匿名对象的使用情况:

    • 当对对象的方法只调用一次时,可以用匿名对象来完成,这样写比较简化。
    • 可以将匿名对象作为实际参数进行传递。

      public class Convey {
      
          private Presenter presenter;
      
          public void setiPresenter() {
              IPresenter iPresenter = presenter.getiPresenter(new IPresenter() {
                  @Override
                  public void run() {
                      // TODO Auto-generated method stub
                  }
              });
          }
      }
      
      public class Test {
      
          public static void main(String[] args) {
              //用匿名对象直接该类的方法
              new Convey().setiPresenter();
          }
      
  • 相关阅读:
    iOS开发之友盟分享的使用
    iOS开发之AFNetworking开源库的使用
    iOS开发之网络基础知识
    iOS开发之Block
    iOS开发之数据库FMDB
    iOS开发常用的网站
    iOS开发之下拉刷新和上拉加载更多
    iOS开发之XML解析
    iOS之网络数据下载和JSON解析
    Linux 部署项目经验总结
  • 原文地址:https://www.cnblogs.com/guyuehuanhuan/p/10046852.html
Copyright © 2020-2023  润新知