匿名类和匿名对象

匿名类和匿名对象


在的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
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 三十
  • 31
  • 32

在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
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

匿名对象

匿名对象也是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();
        }
    }
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页