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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 潘才新 高级黑马   /  2013-7-12 03:24  /  2177 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨兴庭 于 2013-7-13 15:19 编辑

一个不难的问题,我走不过去。我都蒙了,如图return返回一个对象,到输出语句怎么运行的?懂的朋友说一下运行原理

Z)N$MFI%9{SM7BCP`AM9V@H.jpg (78.65 KB, 下载次数: 0)

Z)N$MFI%9{SM7BCP`AM9V@H.jpg

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

6 个回复

倒序浏览
你的function产生一个Inner对象(实现Inter接口),Test.function()执行的结果是Inner的一个实例,然后调用自己的方法method,然后没有然后了

评分

参与人数 1技术分 +1 收起 理由
杜光 + 1 每天提问并回答问题,是对知识的复习和积累.

查看全部评分

回复 使用道具 举报
Test.function()含义:类名.静态方法,function()语句返回的是建立一个对象,故Test.function()的意思实际上是创建了一个Inner对象,等同于Inner in = new Inner();

Test.function这个对象再调用方法method(),结果当然是method run了。

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 一木榜公 于 2013-7-12 08:51 编辑

  1. <P>class InnerClassTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //Test.function().method();</P>
  6. <P>
  7.                 //以上这句等价于以下内容
  8.                 Inter i = Test.function();// 类名调用静态方法 ,方法返回值是new Inner(),这句等价于
  9.                                                     //Inter i = new Inner();这是多态,父类引用指向 子类对象
  10.                 i.method();                // 因此这句等价于 new Inner().mehtod();



  11.         }
  12. }</P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
看老师的的代码 你 要先从 主函数看起,
主函数就一条语句 Test.function().method();
我们知道点前面肯定是类名或者对象,所以第一个点前面是类名,就是Test这个类,点后面是方法名或者成员变量,就是function()方法。之所以不用new是因为他们都是静态的。
在看第二个点, 点儿前面的function方法最后返回的是个Inner对象,他也符合点儿前面是类名或者对象这个规则。在看点后面的内容,首先他带着括号,那就一定不是成员变量,那他就是方法,向上找你会发现他是Inner这个对象的method()方法。这个方法没有返回值,他只有一句代码就是System.out.println("method run");这一句执行的结果就是在屏幕上打印 Method run

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

回复 使用道具 举报
我.....粗心。看错了,{:soso_e138:}
回复 使用道具 举报
其实这个你可以逐层分析的···Test是类~后面的function()很明显是要调用静态方法的,而function中返回的是Inner接口,也就是说Test.function()等价于Inner()方法,然后调用里面的method()方法

评分

参与人数 1技术分 +1 收起 理由
杨兴庭 + 1

查看全部评分

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