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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李爱霞 黑马帝   /  2012-1-1 12:21  /  2202 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李爱霞 于 2012-1-3 10:04 编辑

package com.shengsiyuan.innerclass;

class MemberInner
{
        private int a = 4;
       
        public class Inner2//成员内部类
        {
                private int a = 5;
               
                public void doSomething()
                {
                        //对外部类变量的引用---不是外部的变量不是终态变量吗?为什么这里的是private也可以呀?
                        System.out.println(MemberInner.this.a);
                }
        }
        //在外部类的一个方法总创建内部类的对象
        public void method()
        {
                Inner2 inner = this.new Inner2();
        }
}

public class MemberInnerClassTest
{
        public static void main(String[] args)
        {
                MemberInner.Inner2 inner = (new MemberInner()).new Inner2();//----这一句创建一个内部类的示例还复杂呀?能给分析一下吗?
               
                inner.doSomething();               
        }
}

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

4 个回复

倒序浏览
内部类是外部类的一个成员,成员当然能掉用类中被private修饰的成员

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
内部类可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以相互访问。
关于你说的
  “ MemberInner.Inner2 inner = (new MemberInner()).new Inner2();//----这一句创建一个内部类的示例还复杂呀?能给分析一下吗?”
其实他可以改成如下3行代码,你就应该清楚了:
  MemberInner.Inner2  inner;//使用OutterClass.InnerClass的形式定义内部类变量
  MemberInner  Out1 = new MemberInner();//创建外部类实例,非静态内部类实例将寄存在该实例中
  inner = MemberInner.new Inner2();//通过外部类实例和new来调用内部类构造器创建非静态内部类实例


非静态内部类的构造器必须使用外部类对象来调用
回复 使用道具 举报
  public class Inner2//成员内部类
        {
                private int a = 5;      这里的a是Inner2类的一个成员变量,用成员方法调用成员变量当然是没问题的。而你所说的final型是调用局部变量时要用final修饰的。
               
                public void doSomething()
                {
                       System.out.println(MemberInner.this.a);
                }
        }
我在这里写个例子:   public void doSomething()
                               {
                                       final  int a=5;
                                        class Inner2
                                        {
                                               void  use()
                                               {
                                                           如果要在这里调用a 的话就要用finalf去修饰
                                                }      
                                         }
                                }

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
恩  谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马