匿名类和匿名对象

Posted guyuehuanhuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名类和匿名对象相关的知识,希望对你有一定的参考价值。

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

以上是关于匿名类和匿名对象的主要内容,如果未能解决你的问题,请参考以下文章

匿名对象,内部类和访问修饰符应用

接口作为成员变量——实现类和匿名内部类和匿名对象

内部类和匿名内部类的用法

内部类和匿名方法的使用!

Java匿名内部类和Lambda表达式

22.内部类和匿名内部类