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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© awkflf11 中级黑马   /  2014-3-26 12:01  /  1742 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


        void method2()
        {
                new Object(
                {
                        void show2(){}
                }.show2();

                Object obj = new Object(
                {
                       
                        void show2(){System.out.println("show2 run");}
                        void show3(){System.out.println("show3 run");}
                };

        obj.show2()
        }
}

一个简单的代码,,,请问错在哪里了、、、看了好久,,没有看出来,,,

谢谢了


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 南湘雨梦 于 2014-3-26 12:15 编辑

  1. Object obj = new Object(
  2.                 {
  3.                        
  4.                         void show2(){System.out.println("show2 run");}
  5.                         void show3(){System.out.println("show3 run");}
  6.                 };

  7.         obj.show2()
复制代码

Object里面没有show2方法

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李东梁 于 2014-3-26 12:12 编辑

这是一个匿名内部类问题:
  1. void method2()
  2.         {
  3.                 new Object(
  4.                 {
  5.                         void show2(){}
  6.                 }.show2();

  7.                 Object obj = new Object(
  8.                 {
  9.                        
  10.                         void show2(){System.out.println("show2 run");}
  11.                         void show3(){System.out.println("show3 run");}
  12.                 };

  13.         obj.show2()//错在了这里。
  14.         }
  15. }
复制代码

错在我注释的地方,匿名内部类被提升,Object没有show2方法,所以报错!

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报

这是   什么嘛情况  从农村     不放方便
回复 使用道具 举报
Object没有show2方法
回复 使用道具 举报
正确的应该这样写:
回复 使用道具 举报
正确的应该这样写:
method2()
{
            new Object()
            {                 
                 public void show2(){System.out.println("show2 run");}
                 public void show3(){System.out.println("show3 run");}
            }.show2();
    }

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
void method2()         {                 new Object(                 {                         void show2(){}                 }.show2(); //没有方法体不会运行                  Object obj = new Object(                 {                                                  void show2(){System.out.println("show2 run");}                         void show3(){System.out.println("show3 run");}                 };          obj.show2()         } }

点评

先把代码整理好  发表于 2014-3-26 23:25
回复 使用道具 举报
void method2()        
{                 new Object(                 {                        
void show2(){}                 }.show2(); //没有方法体不会运行               
Object obj = new Object(                 {                                                  
void show2(){
System.out.println("show2 run");}                        
void show3(){
System.out.println("show3 run");}               
};        
obj.show2()         } }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马