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