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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 包晗 中级黑马   /  2012-7-16 23:58  /  1539 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 包晗 于 2012-7-17 11:54 编辑
  1. class Outer
  2. {
  3.         private int x = 3;

  4.         class Inner
  5.         {
  6.                 int x = 4;
  7.                 void function()
  8.                 {
  9.                         int x = 7;
  10.                         System.out.println("inner : "+x);//x 输出7  ;this.x输出4; Outer.this.x 输出4
  11.                 }


  12.         class Inner2//嵌套的嵌套
  13.         {
  14.                         void function2()
  15.                         {
  16.                         System.out.println("inner2 : "+x);//x输出4,
  17.                         }                                       
  18.         }
  19.                         void method2()
  20.                         {
  21.                                 Inner2 x = new Inner2();
  22.                                 x.function2();
  23.                         }
  24.         }                                

  25.    void method()
  26.    {
  27.                 Inner in = new Inner();
  28.                 in.function();
  29.                 in.method2();
  30.    }

  31. }



  32. class InnerClassDemo2
  33. {
  34.         public static void main(String[] args)
  35.         {
  36.                
  37.                 Outer out= new Outer();
  38.                
  39.                 out.method();
  40.                 //Outer.Inner o = new Outer().new Inner();
  41.                 //o.function();
  42.         }
  43. }
复制代码
复习视频内部类,我在内部类里 又写了一个内部类 Inner2   想调用 Inner 里的 x=7  ;
在Inner里我用 Inner.this.x   和Outer.this.x 都指向的不是X=7  
想请教一下 怎样 在内部类inner2 中 输出x=7
谢谢了...代码写的不规范...请见谅

(黑马 我来了)

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
将x=7的x换一个名称,放在Inner类全局变量的位置,就可以在inner2里得到7
  1. class Outer {
  2.         private int x = 3;
  3.         class Inner {
  4.                 int x = 4;
  5.                 int y;
  6.                 void function() {
  7.                         y= 7;
  8.                         System.out.println("inner : " + x);// x 输出7 ;this.x输出4; Outer.this.x
  9.                 }
  10.                 class Inner2// 嵌套的嵌套
  11.                 {
  12.                         void function2() {
  13.                                 System.out.println("inner2 : " + y);//输出7
  14.                         }
  15.                 }
  16.                 void method2() {
  17.                         Inner2 x = new Inner2();
  18.                         x.function2();
  19.                 }
  20.         }
  21.         void method() {
  22.                 Inner in = new Inner();
  23.                 in.function();
  24.                 in.method2();
  25.         }
  26. }
复制代码
因为方法里的x是局部变量,function()和Inner2同在成员位置上,要想Inner2能访问到function()的局部变量,那么就要在方法外部声明一个全局变量作为引用,记住:平级方法里的变量相互是不可见的

点评

谢谢你 我懂了  发表于 2012-7-17 09:23

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我的理解是
void function()//这是一个方法体,在内存中随着调用而产生,程序跑过了,就释放内存了。

09.                {

10.                        int x = 7;

11.                        System.out.println("inner : "+x);//x 输出7  ;this.x输出4; Outer.this.x 输出4

12.                }
所以,你想要在Inner2中输出x=7,按照你的意思,用简单的调用是不能实现的。

        int function()
                {
                        int x = 7;
                        //System.out.println("inner : "+x);//x 输出7  ;this.x输出4; Outer.this.x 输出4
            return x;
                }
                class Inner2//嵌套的嵌套
        {
                        void function2(){
                                System.out.println("inner2 : "+function());//此时输出7
                                }                                       

        }
不知道把方法体改成返回整型,是不是违背了你的初衷,这样的确可以输出7

点评

谢谢你啊  发表于 2012-7-17 09:24

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
x=7是函数void function()内的局部变量,在函数结束时自动销毁。在void类型函数外部是不可能获得并使用的数据,而根据“地头蛇理论”,在方法void function()中输出7。  int x = 4是类Inner的成员,可以被该类的方法和内部类使用,因此在void function2()中x=4的。

本人语言组织能力有限,尽量给你讲明白。。。

点评

谢谢  发表于 2012-7-17 10:48
回复 使用道具 举报
int x=7;是定义在内部类Inner的成员方法function()中的局部变量,而不是Inner类的成员属性,其作用范围仅限于Inner的function()中。
若想在嵌套的内部类Inner2中调用x=7,只能通过Inner类的function()方法来调用。
调用方法如下:
class Inner2//嵌套的嵌套
        {
                        void function2()
                        {
                        System.out.println("inner2 : "+x);//x输出4
                        new Inner().function(); //这里的x将输出7
                        }                                       
        }
                        void method2()
                        {
                                Inner2 x = new Inner2();
                                x.function2();
                        }
        }           

点评

谢谢  发表于 2012-7-17 10:49
回复 使用道具 举报
樊佰轩 发表于 2012-7-17 08:32
x=7是函数void function()内的局部变量,在函数结束时自动销毁。在void类型函数外部是不可能获得并使用的数 ...

地头蛇理论....我还真去百度了下......呵呵
差不多理解了
回复 使用道具 举报
包晗 发表于 2012-7-17 09:30
地头蛇理论....我还真去百度了下......呵呵
差不多理解了

其实这个是我们当时C++老师将全局变量和局部变量说的,有没有我也不知道,就用了。。。找不到别纠结那个词。

点评

嘿嘿 理解理解  发表于 2012-7-17 11:55
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马