zoukankan      html  css  js  c++  java
  • 局部内部类对外部属性和变量的访问测试

    package test;
    /**
     * 
     * 局部内部类能不能访问外围方法或者属性的值 ?
     * 
     * 局部内部类可以访问属性 ,但是不能访问非final的局部变量 
     *
     */
    public class Test1 {
        private String attribute ;
        public void f(){
            final String localAttribute = "" ;
            class InnerClass {
                public InnerClass(){
                    System.out.println("attribute " + attribute );
                    attribute = attribute + "" ;
                    //Cannot refer to 
                    //the non-final local variable localAttribute 
                    //defined in an enclosing scope
                    System.out.println("localAttribute " + localAttribute );
                    localAttribute = localAttribute + "" ;
                }
            }
        }
    }
    /**
     * 测试任意代码块中的内部类访问属性和局部变量 
     */
    class TestIfLocalClass {
        private String attribute ;
        public TestIfLocalClass(){
            final String localAttribute = "" ;
            if(true){
                class IfLocalClass {
                    public IfLocalClass(){
                        System.out.println(attribute);
                        attribute = attribute + "" ;
                        System.out.println(localAttribute);
                        localAttribute = localAttribute + "" ;
                    }
                }
            }
        }
    }
    /**
     * 测试匿名内部类对外围属性和本地变量的访问 
     */
    interface TestAnonymousClass{
        public void f() ;
    }
    class TestAClass{
        private String attribute ;
        public TestAnonymousClass f(){
            final String localAttribute = "" ;
            return new TestAnonymousClass(){
                @Override
                public void f() {
                    System.out.println(attribute);
                    attribute = attribute + "" ;
                    System.out.println(localAttribute);
                    localAttribute = localAttribute + "" ;
                }
            } ;
        }
    }

    通过上面的测试可得,局部内部类能够访问和修改外部类的属性但是不能访问非final修饰的局部变量,可以访问final修饰的局部变量但是不能修改其值。

  • 相关阅读:
    SpringCloud教程五:Zuul(路由+过滤)
    ubuntu18.0.4 不能下载 libgd2-dev
    ubuntu18.04下安装中文输入法
    Ubuntu下tomcat启动报错:Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
    Java面试题汇总(一)
    Redis常见面试题
    Docker是什么
    Django实现自动发布(1数据模型)
    数据随机分配的思考
    单链表反转
  • 原文地址:https://www.cnblogs.com/caiyao/p/4693332.html
Copyright © 2011-2022 走看看