黑马程序员技术交流社区

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

作者: litaojisuanji    时间: 2014-1-5 22:46
标题: 内部类变量访问问题
本帖最后由 litaojisuanji 于 2014-1-7 00:45 编辑
  1. class Outer
  2. {
  3.         private int num  = 10;

  4.         public void method()
  5.         {
  6.                 final int num = 20;
  7.                 //定义类
  8.                 class Inner
  9.                 {
  10.                         int num = 30;
  11.                         public void show()
  12.                         {
  13.                                 int num = 40;
  14.                                 System.out.println(Outer.this.num+"***"+this.num+"***"+num);
  15.                                 //分别打印出10,30,40,那怎么打印出20
  16.                         }
  17.                 }
  18.                 //创建对象
  19.                 Inner i = new Inner();
  20.                 i.show();
  21.         }
  22. }
  23. class InnerTest
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 Outer o = new Outer();
  28.                 o.method();
  29.         }
  30. }
复制代码
怎么打印20
作者: 张洪慊    时间: 2014-1-6 00:48
  1. public void method()
  2.         {
  3.                 final int num = 20;
  4.                 final int numCopy=num;//采用折中办法,我定义一个变量其值与num相同,哈哈没有技术含量
  5.                 //定义类
  6.                 class Inner
  7.                 {
  8.                         int num = 30;
  9.                         public void show()
  10.                         {
  11.                                 int num = 40;
  12.                                 System.out.println(Outer.this.num+"***"+this.num+"***"+num+"****"+numCopy);
  13.                                 //分别打印出10,30,40,那怎么打印出10
  14.                         }
  15.                 }
  16.                 //创建对象
  17.                 Inner i = new Inner();
  18.                 i.show();
  19.         }
复制代码

作者: 小悠久    时间: 2014-1-6 09:10
你这个代码没问题啊,我试啦一下能够打印出10,这是我运行的截图


作者: IT人    时间: 2014-1-6 11:02
刚才运行了一下你的程序,打印结果10***30***40,没有错。不知道楼主想问的什么问题?在System.out.println(Outer.this.num+"***"+this.num+"***"+num);中打印外部类的成员成员变量num,因为持有外部类的引用,这样写Outter.this.num是对的!不知道楼主的问题疑惑是啥???请说明白点
作者: 肖银    时间: 2014-1-6 18:58
你问的应该是怎么打印出20吧!

  1. class Outer
  2. {
  3.         private int num  = 10;
  4.         public void method()
  5.         {
  6. /*把num改为大写,因为被final修饰过后变成了常量,
  7. 而常量是可以通过常量名直接访问的.如果是小写,
  8. 那么它将会旁被Inner类show()方法中的变量num覆盖掉
  9. */
  10.                 final int NUM = 20;
  11.                 //定义类
  12.                 class Inner
  13.                 {
  14.                         int num = 30;
  15.                         public void show()
  16.                         {
  17.                                 int num = 40;
  18.                                 System.out.println(Outer.this.num+"***"+ NUM +"***"+this.num+"***"+num);
  19.                                 //分别打印出10,30,40,那怎么打印出20
  20.                         }
  21.                 }
  22.                 //创建对象
  23.                 Inner i = new Inner();
  24.                 i.show();
  25.         }
  26. }
  27. class Demo
  28. {
  29.         public static void main(String[] args)
  30.         {
  31.                 Outer o = new Outer();
  32.                 o.method();
  33.         }
  34. }
复制代码








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