黑马程序员技术交流社区

标题: 关于内部类的示例问题 [打印本页]

作者: 李爱霞    时间: 2012-1-1 12:21
标题: 关于内部类的示例问题
本帖最后由 李爱霞 于 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();               
        }
}

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


非静态内部类的构造器必须使用外部类对象来调用
作者: 黑马巩伟伟    时间: 2012-1-2 22:45
  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去修饰
                                                }      
                                         }
                                }
作者: 李爱霞    时间: 2012-1-3 10:04
恩  谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2