匿名内部类 ~ 内部类之二

2022-01-23  本文已影响0人  喏喏2021

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

通过上面的例子可以看:

上一篇 下一篇

猜你喜欢

热点阅读