黑马程序员技术交流社区

标题: 内部类访问问题 [打印本页]

作者: vaqh    时间: 2014-7-27 21:38
标题: 内部类访问问题
class A
{
   int x = 1;
   class B {
  int x = 2;
  void func() {
                    int x = 3;
                  System.out.println( ? );
                }
          }
  }
在打印语句中如何打印这3个x变量?为什么呢???


作者: DarkSky    时间: 2014-7-27 21:55
class A{
        int x = 3;
        class B{
                int x = 4 ;
                void function(){
                        int x = 5;
                        System.out.println("x=" + x);
                        System.out.println("x=" + this.x);
                        System.out.println("x=" + new A().x);

                }
        }
        void show(){
                B b = new B();
                b.function();
        }
}






class  Demo_Test{
        public static void main(String[] args) {
                A a = new A();
                a.show();
        }
}
我也很菜,自己打的。。
作者: 闪电博尔特    时间: 2014-7-27 22:00
基础测试还有重复的啊
作者: vaqh    时间: 2014-7-27 22:00
DarkSky 发表于 2014-7-27 21:55
class A{
        int x = 3;
        class B{

谢谢,但是为什么不在Demo_Test类中直接调用function方法呢
作者: vaqh    时间: 2014-7-27 22:25
闪电博尔特 发表于 2014-7-27 22:00
基础测试还有重复的啊

???你也是这个啊
作者: DarkSky    时间: 2014-7-27 22:47
vaqh 发表于 2014-7-27 22:00
谢谢,但是为什么不在Demo_Test类中直接调用function方法呢

外部类要想访问内部类,必须要建立内部类的对象。不能直接访问。
作者: vaqh    时间: 2014-7-27 22:53
DarkSky 发表于 2014-7-27 22:47
外部类要想访问内部类,必须要建立内部类的对象。不能直接访问。

额,,谢谢了
作者: 你好吗    时间: 2014-7-27 23:39
vaqh 发表于 2014-7-27 22:00
谢谢,但是为什么不在Demo_Test类中直接调用function方法呢

这样也可以的
作者: 我行我SHOW‰    时间: 2014-7-27 23:44
围观学知识~~~~~
作者: vaqh    时间: 2014-7-27 23:45
你好吗 发表于 2014-7-27 23:39
这样也可以的

那么如何调用呢
作者: David.L    时间: 2014-7-27 23:56
DarkSky 发表于 2014-7-27 22:47
外部类要想访问内部类,必须要建立内部类的对象。不能直接访问。

应该要加上非静态吧?
作者: DarkSky    时间: 2014-7-28 00:34
David.L 发表于 2014-7-27 23:56
应该要加上非静态吧?

对,静态的可以调用。。呵呵,我说的有漏洞。
作者: David.L    时间: 2014-7-28 01:01
本帖最后由 David.L 于 2014-7-28 01:02 编辑
DarkSky 发表于 2014-7-27 21:55
class A{
        int x = 3;
        class B{

发现你的代码有问题哦,打印里面的你使用了new A(),这时就新建了一个新对象了,不是主函数里的对象a了
也就是这个new A().x已经不是你的代码里原来对象里的=3的那个x了

附上我写的代码,仅供参考
  1. class A
  2. {
  3.         int x = 1;
  4.         class B
  5.         {
  6.                 int x = 2;
  7.                 void func()
  8.                 {
  9.                         int x = 3;
  10.                         System.out.println("____"+getA()+"____"+this.x+"____"+x);
  11.         
  12.                         //或者将x=1用static修饰,这样直接可以用A.x引用,就不需要getA方法了
  13.                 }
  14.         }
  15.         int getA()
  16.         {
  17.                 return x;
  18.         }
  19. }
  20.   

  21. public class Test
  22. {
  23.         public static void main(String[] arg)
  24.         {
  25.                 A.B b=new A().new B();
  26.                 b.func();
  27.         }
  28. }


  29. //输出结果:____1____2____3
复制代码

作者: hjfeng1987    时间: 2014-7-28 08:47
System.out.println(x);
System.out.println(this.x );
System.out.println(A.this.x);
作者: vaqh    时间: 2014-7-28 08:49
hjfeng1987 发表于 2014-7-28 08:47
System.out.println(x);
System.out.println(this.x );
System.out.println(A.this.x);

哦,正解
作者: 闪电博尔特    时间: 2014-7-28 13:41
vaqh 发表于 2014-7-27 22:25
???你也是这个啊

是的啊啊
作者: tiandzwx    时间: 2014-7-28 14:05
一看我也不懂,立马补知识
作者: vaqh    时间: 2014-7-28 19:16
tiandzwx 发表于 2014-7-28 14:05
一看我也不懂,立马补知识

加    油




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