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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© litaojisuanji 高级黑马   /  2014-1-5 22:46  /  1190 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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

4 个回复

倒序浏览
  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.         }
复制代码
回复 使用道具 举报
你这个代码没问题啊,我试啦一下能够打印出10,这是我运行的截图

回复 使用道具 举报
刚才运行了一下你的程序,打印结果10***30***40,没有错。不知道楼主想问的什么问题?在System.out.println(Outer.this.num+"***"+this.num+"***"+num);中打印外部类的成员成员变量num,因为持有外部类的引用,这样写Outter.this.num是对的!不知道楼主的问题疑惑是啥???请说明白点
回复 使用道具 举报
你问的应该是怎么打印出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. }
复制代码



回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马