A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fightingwang 中级黑马   /  2015-1-30 23:15  /  1237 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface A
{
        void test();
}
public class Atest
{
        public static void main(String[] args)
        {
                int age = 11;
                A a = new A()
                {
                        
                        public void test()
                        {
                                System.out.println(age);
                        }
                };
                a.test();
        }
}
代码如上,匿名内部类访问外部类的成员变量的时候不是要用final修饰吗,怎么我的没用final修饰,编译的时候也不报错

5 个回复

倒序浏览
运行有问题吗 应该是因为age是局部变量的关系吧
回复 使用道具 举报
好像有错误吧?看看下面的代码interface A
{
        void test();
}
abstract class Atest implements A
{
        public static void main(String[] args)
        {
                final int age = 11;
                Atest a = new Atest()
                {

                        public void test()
                        {
                                System.out.println(age);
                        }
                };
                a.test();
        }
}


回复 使用道具 举报
流行VS泪痕 发表于 2015-1-31 10:37
好像有错误吧?看看下面的代码interface A
{
        void test();

嗯啊,可能是编译器的问题,我换了个编译工具确实报错了
回复 使用道具 举报
d342784178 发表于 2015-1-31 09:52
运行有问题吗 应该是因为age是局部变量的关系吧

局部变量在匿名内部类调用时也得定义成final
回复 使用道具 举报
你的是JDK1.8吧  1.8默认给你加final的  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马