美文网首页
匿名内部类 ~ 内部类之二

匿名内部类 ~ 内部类之二

作者: 喏喏2021 | 来源:发表于2022-01-23 21:45 被阅读0次

    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
    

    通过上面的例子可以看:

    • 匿名内部类可以扩展类,也可以实现接口
    • 我们只能选择一个,扩展类或是接口,是接口的话,也只能是一个

    相关文章

      网友评论

          本文标题:匿名内部类 ~ 内部类之二

          本文链接:https://www.haomeiwen.com/subject/cngmhrtx.html