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修饰的局部变量但是不能修改其值。

  • 相关阅读:
    小项目-购物网站个别功能的具体实现思路-中(新手)
    小项目-购物网站个别功能的具体实现思路-上(新手)
    性能测试需具备的知识点
    二.re库介绍
    一.正则表达式
    十六.MySQL存储过程
    十五.自定义函数
    十四.运算符和函数
    十三.无限极分类表设计--自身连接
    十二.连接的语法结构
  • 原文地址:https://www.cnblogs.com/caiyao/p/4693332.html
Copyright © 2011-2022 走看看