为什么会有匿名内部类?
对于抽象类来说,需要一个子类来继承他,并实现它的方法
但在一些场合里,这个子类可能只需要使用一次,这样单独写一个子类出来有点多余,就可以使用匿名内部类来实现
最顶层的父
中间的子
最下的实例
匿名内部类就是可以把中间这一步省去
使用场合较多的就是多线程的实现,因为他要继承thread类,或者实现runnable接口,当然接口也是可以使用匿名内部类
以接口方式为例:
最上的父:系统已经定义好了 接口Runnable(),
中间的子:MyThread 实现父类
public class MyThread implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
}
}
最下的实例
public class ThreadMain{
public static void main(String[] args){
//实例化
MyThread myRunnable = new MyThread();
//创建线程
Thread thread = new Thread(myRunnable);
//启动
thread.start();
}
}
那么使用匿名内部类来实现就更简单了,省去中间创建子类这一步
public class ThreadMain{
public static void main(String[] args){
//没有去创建一个子类再实例化
//new Runnable(){}; 实现Runnable的类的对象,赋给r
Runnable r = new Runnable(){
public void run(){
}
};
//把这个对象的引用,拿来创建线程
Thread thread = new Thread(r);
//启动
thread.start();
}
}
当然这里有更简便的写法。把线程的声明和启动一条龙写成链式的:
private void update() {
new Thread(new Runnable(){
@Override
public void run(){
}
}).start();
}