1. 基本使用
public class AnonymousClassTest {
//一个接口
interface AnonymousClass {
int value();
}
public AnonymousClass getAnonymousClass(){
//新建一个接口实现类
return new AnonymousClass(){
private int value = 10;
public int value(){
return value;
}
};
}
public static void main(String[] args) {
AnonymousClassTest a = new AnonymousClassTest();
AnonymousClass c = a.getAnonymousClass();
System.out.println(c.value());
}
}
上面的语法看着是不是有点奇怪呢,一个接口怎么也可以用new了呢,
应该是一个实体类实现了这个接口,并作接口方法的具体实现,其实它是已经做到了
2. 对抽象类进行初始化
abstract class AnonymousBase {
public AnonymousBase(int i){
System.out.println("init,i="+ i);
}
public abstract void value(int j);
}
public class AnonymousClassInit {
//这里的i,因为没有接下来使用,所以不需要使用final
//这里的j,因为在value方法中使用了,所以需要使用final类型
public static AnonymousBase getBase(int i,final int j){
return new AnonymousBase(i){
public void value(int v){
System.out.println("anonymous value()=" + (j+v));
}
};
}
public static void main(String[] args) {
AnonymousBase base = getBase(1,2);
base.value(2);
}
}
//init,i=1
//anonymous value()=4
通过上面的例子可以看:
- 匿名内部类可以扩展类,也可以实现接口
- 我们只能选择一个,扩展类或是接口,是接口的话,也只能是一个
网友评论