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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 戎石锁 于 2012-8-21 22:23 编辑

  当内部类在一个成员位置上时,相当于一个成员,能别成员修饰符修饰,能访问外部类的成员。
     为什么当内部类定义在局部时就有些不能了呢? 这里定义成局部是不是意思 说该内部类放在一个方法中?     这时不可以被成员修饰符修饰, 不可以访问其所在局部中的局部变量。  
     但是该内部类在这个局部中和那些局部变量不是平等的关系吗?怎么就不能访问了呢? 也作为局部中的一个成员,怎么就不能被修饰呢?


  要是说 局部变量的数据是因为 随着 方法的存在而放在 栈 内存中,随方法消失而消失。 那调用该内部类不是肯定会加载这个方法的嘛。 那么这些局部变量不是也会存在。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
内部类的位置
                A:成员位置
                        可以被private修饰
                        可以被static修饰。(它访问的外部类的成员必须是静态的)

                class Outer
                {
                        int num = 10;

                        class Inner
                        {
                                public void show()
                                {
                                        sop(num);
                                }
                        }       

                        public void method()
                        {
                                Inner i = new Inner();
                                i.show();
                        }
                }
                B:局部位置
                        可以直接访问外部类中的成员,也可以直接访问局部成员,但是
                          局部成员要用final修饰。
               
                class Outer
                {
                        int num = 10;

                        public void method()
                        {
                                int num2 = 20;
                                final int num3 = 30;

                                class Inner
                                {
                                        public void show()
                                        {
                                                sop(num3);
                                        }
                                }

                                Inner i = new Inner();
                                i.show();
                        }
                }

                注意:
                        局部内部类不能用private和static修饰。
        匿名内部类(局部内部类的简写)
                前提:继承一个类或者实现一个接口
                格式:
                        new 父类名或者接口名()
                        {
                                重写父类方法或者实现接口中的方法。
                                也可以自定义其他方法。
                        };

                举例:
                interface Inter
                {
                        public abstract void show();
                }

                class Outer
                {
                        public void method()
                        {
                                new Inter()
                                {
                                        public void show()
                                        {
                                                sop("show");
                                        }
                                };

                                //如何调用方法呢?
                                new Inter()
                                {
                                        public void show()
                                        {
                                                sop("show");
                                        }
                                }.show();

                                //或者
                                Inter i = new Inter()
                                {
                                        public void show()
                                        {
                                                sop("show");
                                        }
                                };
                                i.show();
                        }
                }





a.jpg (45.77 KB, 下载次数: 11)

a.jpg

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
局部内部类可以定义在一个方法或者比方法更小的模块中。局部内部类就像一个局部变量一样,不能用public、protected、private 修饰。另外,局部内部类只能访问 final local variables (用final 修饰的局部变量)。局部内部类用得非常少,是四种内部类中用得最少的一种。建议楼主不要纠结这个问题。多看看匿名内部类啥的就好了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马