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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑文博 中级黑马   /  2012-7-2 17:44  /  2571 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑文博 于 2012-7-2 20:43 编辑
  1. /*        
  2. 匿名内部类:
  3. */
  4. abstract class AbsDemo
  5. {
  6.         abstract void show();        
  7. }

  8. class Outer
  9. {
  10.         int x = 3;

  11.         /*
  12.         class Inner extends AbsDemo
  13.         {
  14.                 int num = 90;
  15.                 void show()
  16.                 {
  17.                         System.out.println("show :"+num);
  18.                 }
  19.                 void abc()
  20.                 {
  21.                         System.out.println("hehe");
  22.                 }
  23.         }
  24.         */

  25.         public void function()
  26.         {
  27.                 AbsDemo d = new AbsDemo()
  28.                 {
  29.                         int num = 9;
  30.                         void show()
  31.                         {
  32.                                 System.out.println("num==="+num);
  33.                         }
  34.                         void abc()
  35.                         {
  36.                                 System.out.println("haha");
  37.                         }
  38.                 };

  39.                 d.show();
  40.         }
  41. }

  42. class InnerClassDemo4
  43. {
  44.         public static void main(String[] args)
  45.         {
  46.                 new Outer().function();
  47.         }
  48. }
复制代码
为什么32行可以定义num的值而16行不可以定义num值呢? 不都是类中成员吗?

12 个回复

倒序浏览
我运行时,可以@

你错误提示看一下
回复 使用道具 举报
abstract class AbsDemo
{
        abstract void show();        
}

class Outer
{
        int x = 3;

        
        class Inner extends AbsDemo
        {
                int num = 90;
                void show()
                {
                        System.out.println("show :"+num);
                }
                void abc()
                {
                        System.out.println("hehe");
                }
        }
      

        public void function()
        {
                new Inner().show();
        }
}

class InnerClassDemo4
{
        public static void main(String[] args)
        {
                new Outer().function();
        }
}

结果是
D:\java\zuoye\ceshi2>javac  d.java

D:\java\zuoye\ceshi2>java  InnerClassDemo4
show :90

完全没问题啊,楼主是写错代码了吧!
回复 使用道具 举报
wyl530274554 发表于 2012-7-2 20:03
我运行时,可以@

你错误提示看一下

我就是运行不出错才问的。。 你看毕老师视频面向对象第9天-04(匿名内部类)这个的第34分钟45秒开始提到的,但是只解释了32行可行,没解释16行为什么不可行啊。。。
回复 使用道具 举报
邵阳 发表于 2012-7-2 20:16
abstract class AbsDemo
{
        abstract void show();        

我就是运行不出错才问的。。 你看毕老师视频面向对象第9天-04(匿名内部类)这个的第34分钟45秒开始提到的,但是只解释了32行可行,没解释16行为什么不可行啊。。。
回复 使用道具 举报
郑文博 发表于 2012-7-2 20:30
我就是运行不出错才问的。。 你看毕老师视频面向对象第9天-04(匿名内部类)这个的第34分钟45秒开始提到 ...

16行可以定义啊。num属于成员变量啊,当然可以定义num。
回复 使用道具 举报
邵阳 发表于 2012-7-2 20:36
16行可以定义啊。num属于成员变量啊,当然可以定义num。

我也这么理解 毕老师说不行啊。。。
回复 使用道具 举报
你再重新看一下,毕老明明说,可以:@
回复 使用道具 举报
郑文博 发表于 2012-7-2 20:37
我也这么理解 毕老师说不行啊。。。

你要相信jvm虚拟机,可以运算出结果。而且你好好看看视频,我也刚看那里,毕老师没说过啊
回复 使用道具 举报
wyl530274554 发表于 2012-7-2 20:38
你再重新看一下,毕老明明说,可以

呃 他说那句“这还不行啊”是个问句啊:L 真心没听清楚啊 不好意思了啊
回复 使用道具 举报
邵阳 发表于 2012-7-2 20:39
你要相信jvm虚拟机,可以运算出结果。而且你好好看看视频,我也刚看那里,毕老师没说过啊 ...

说了 。。。只是他说“这还不行啊”是个问句,应该是当时跟课堂上同学沟通的一句话。。我听叉了
回复 使用道具 举报
邵阳 发表于 2012-7-2 20:39
你要相信jvm虚拟机,可以运算出结果。而且你好好看看视频,我也刚看那里,毕老师没说过啊 ...

说了 。。。只是他说“这还不行啊”是个问句,应该是当时跟课堂上同学沟通的一句话。。我听叉了
回复 使用道具 举报
哥哦,他的意思很清楚啦,就是可以。:L

明天你再听一遍,就能听懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马