• 局部内部类和匿名内部类


    package com.lei.duixiang;
    /**
     * 局部内部类
     * 1、如果需要在方法中使用局部变量,该局部变量需要被设置为 final 类型
     * 2、换句话说,在方法中定义的内部类只能访问方法中 final 类型的局部变量
     * 这是因为在方法中定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期
     * 由于该局部变量被设置为final,所以不能在内部类中改变局部变量的值
     * @author Administrator
     * 
     * 匿名内部类 OutClass4
     */
    
    interface Outinterface {
    } // 定义一个接口
    
    public class OutClass3 { // 局部内部类
        public Outinterface doit(final String x) {
            // 在 doit() 方法中定义一个内部类
            class InnerClass2 implements Outinterface {
                public InnerClass2(String s) {
                    s = x;
                    System.out.println(s);
                }
            }
    
            return new InnerClass2("doit");
        }
    
        /**
         * 在 doit() 方法 内部首先返回 一个 Outinterface 的引用,然后在 return 语句中插入一个自定义内部类的代码
         * 由于这个类没有名称,所以这里将该内部类成为匿名内部类
         * 实质上这种内部类的作用就是创建一个实现于 Outinterface 接口匿名类的对象
         * 匿名类的所有是实现代码都需要在大括号之间进行编写,语法如下:
         * return new  A(){    ...//内部类体    };
         * 在匿名内部类定义结束后,需要加分后标识
         * 这个分号并不是是代表定义内部类结束的标识,而是代表创建 Outinterface 引用表达式的标识
         * @author Administrator
         *
         */
        public class OutClass4 { // 匿名内部类
            public Outinterface doit(){    //定义 doit() 方法
                return new Outinterface(){    //声明 匿名内部类
                    private int i = 0;
                    public int getValue(){
                        return i;
                    }
                };
            }
        }
        
        
        public static void main(String[] args) {
            OutClass3 out = new OutClass3();
            out.doit("Outinterface doit");
        }
    }
  • 相关阅读:
    [Vijos] 天才的记忆
    [Vijos] 河蟹王国
    [Vijos] SuperBrother打鼹鼠
    [Vijos] 弱弱的战壕
    [洛谷P3792] 由乃与大母神原型和偶像崇拜
    【模板】乘法逆元
    [USACO13NOV]空荡荡的摊位Empty Stalls
    [USACO08OPEN]牛的车Cow Cars
    [SCOI2005]扫雷
    [USACO16OPEN]关闭农场Closing the Farm_Silver
  • 原文地址:https://www.cnblogs.com/spadd/p/4172868.html
Copyright © 2020-2023  润新知