这是用Java多态方式实现的调用
package com.huang.test;
/**
*
* @author huanghaifeng
*
* 普通类的测试
*/
abstract class Parent {
public abstract void run();
}
class Sun extends Parent{
@Override
public void run() {
System.out.println("执行子类的方法!");
}
}
public class Test {
public static void main(String[] args) {
Parent parent = new Sun();
parent.run();
}
}
这是用匿名内部类实现的方法
package com.huang.test;
/**
*
* @author huanghaifeng
*
* 匿名内部类的测试(继承方式)
*/
abstract class Parent {
public abstract void run();
}
public class Test {
public static void main(String[] args) {
Parent parent = new Parent() {
@Override
public void run() {
System.out.println("这是匿名内部类的方法!");
}
};
parent.run();
}
}
*******************
package com.huang.test;
/**
*
* @author huanghaifeng
*
* 匿名内部类的测试(实现接口的方式)
*/
interface Parent {
public void run();
}
public class Test {
public static void main(String[] args) {
Parent parent = new Parent() {
@Override
public void run() {
System.out.println("这是匿名内部类的方法!");
}
};
parent.run();
}
}
总结:
匿名内部类 -- 就是没有名字的类,其实也是对继承父类或者实现接口的功能扩展。
使用场景 -- 只创建一次,用后垃圾回收器就回收,提高资源利用率。
前提 -- 必须继承一个类,或者实现一个接口。
其实我们创建线程时,也在使用匿名内部类,在他的内部也是实现了Runnable接口。
public class Test {
public static void main(String[] args) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("这里用的就是匿名内部类!");
}
});
thread1.start();
Thread thread2 = new Thread(){
@Override
public void run() {
super.run();
System.out.println("这里用的就是匿名内部类!");
}
};
thread2.start();
Runnable thread3 = new Runnable() {
@Override
public void run() {
System.out.println("这里用的就是匿名内部类!");
}
};
thread3.run();
}
}
上面创建线程的几种示例中,其实就是使用的匿名内部类。因为Java设计实现Thread类的时候就实现了Runnable接口,所以是满足匿名内部类使用前提的。
项目中的应用:
new UIJob("moniUiJobStatus") {
public IStatus runInUIThread(IProgressMonitor monitor) {
WorkbenchUtil.setStateLineText("监控程序开始扫描。。。");
return Status.CANCEL_STATUS;
}
}.schedule();