黑马程序员技术交流社区

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

作者: java陈辉    时间: 2013-12-20 20:41
标题: 关于内部类的问题
本帖最后由 java陈辉 于 2013-12-21 20:13 编辑

下面这段代码打印的结果为什么是6?而不是4或者5呢?求解释。
class Outer{
        int num=4;
        class Inner{
              int num=5;                  //将这里注释掉,打印的结果又变成了4.
                void method(){
                        int num=6;      //将这里注释掉,打印的结果变成了5.
                        System.out.println(num);
                }
        }
   public void show(){
         Inner in=new Inner();
         in.method();
    }
}
public class InnerDemo {
         public static void main(String[] args) {
          new Outer().show();
        }

}


作者: litaojisuanji    时间: 2013-12-20 20:53
首先要说明的是:
      你给的程序有问题,方法少了括号,变量少了分号
其次:
       打印变量,记住一句就行,局部有就打印局部的,
局部没有就打印成员的。
首先在局部中找,找到就打印局部中的6,注释掉局部的
就打内部类中的成员变量,找到就打印成员变量5,再注释
掉,就在外部类中找,找到就打印外部类中的4.
作者: 黄伟财    时间: 2013-12-21 00:27
这个很简单啊,你忘记了,变量的使用范围了吗,例如你在一个大的范围里面定义了变量num,然后在这个大的范围里面又有一个方法里面也是也有一个num,那么此时相同的num会被覆盖,就是说小范围的num会覆盖大范围的num,如果是不同名字的变量则不会出现这种情况。
作者: 刘松703    时间: 2013-12-21 09:58
这是关于变量的范围的问题,哈哈,你可以在加两句System.out.println(num);可能让你看的更明白;
  1. class Outer{
  2.         int num=4;
  3.         class Inner{
  4.               int num=5;                  //将这里注释掉,打印的结果又变成了4.
  5.                 void method(){
  6.                         int num=6;      //将这里注释掉,打印的结果变成了5.
  7.                         System.out.println("method:"+num);
  8.                 }
  9.                 {
  10.                         System.out.println("Inner:"+num);
  11.                 }
  12.         }
  13.    public void show(){
  14.          Inner in=new Inner();
  15.          in.method();
  16.          System.out.println("Outer:"+num);
  17.     }
  18. }
  19. public class InnerDemo {
  20.          public static void main(String[] args) {
  21.           new Outer().show();
  22.         }

  23. }
复制代码


结果是:
Inner:5
method:6
Outer:4
看看的,这样应该挺清楚了




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