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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李阳阳 中级黑马   /  2013-3-18 13:42  /  1107 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李阳阳 于 2013-3-18 19:58 编辑
  1. interface Inter
  2. {
  3.         abstract void method();
  4. }
  5. class Test
  6. {
  7.         //补足代码,通过匿名内部类
  8.         static class inner implements Inter
  9.         {
  10.                 public  void method()
  11.                 {
  12.                         System.out.println("method run");
  13.                 }
  14.         }
  15.         static inner fuction()
  16.         {
  17.                 return new inner();//这样不是也行吗?
  18.         }
  19. }
  20. class InnerClassTest
  21. {
  22.         public static void main(String[] args)
  23.                 {
  24.                         //Test.function():Test类中有一个静态的方法function。
  25.                 //.method():function这个方法运算后的结果是一个对象。而且是一个Inter类型的对象。
  26.                 //因为只有是Inter类型的对象,才可以调用method方法。

  27.                                 Test.fuction().method();   
  28.         }
  29. }
复制代码
主函数内注释部分前两个我知道,但是Test.fuction()运算之后为什么只有Inter类型的对象才能调用method方法呢,Inter不是一个接口不能创建对象吗?所以调用method方法的应该是一个实现接口的类,这里也就是内部类Inner,所以Test.fuction()之后不是应该返回的是一个内部类对象吗?不知道是那个点儿转不回来了,大家给讲讲、

评分

参与人数 1技术分 +1 收起 理由
洪建超 + 1

查看全部评分

3 个回复

倒序浏览
你讲的已经很正确了啊,接口当然是不能创建对象了。
可以看到编译产生的class文件有4个,其中包括一个接口,
当Test.fuction()之后返回的是Test$inner.class,
是一个类,不是接口,只不过这个类中实现了接口中的方法,那么,
当调用method方法时,自然是去执行打印的那句话了。

无标题.png (2.55 KB, 下载次数: 8)

无标题.png
回复 使用道具 举报
fighting 发表于 2013-3-18 14:51
你讲的已经很正确了啊,接口当然是不能创建对象了。
可以看到编译产生的class文件有4个,其中包括一个接口 ...

“因为只有是Inter类型的对象,才可以调用method方法。”其实就这句不明白、、
回复 使用道具 举报
李阳阳 发表于 2013-3-18 17:22
“因为只有是Inter类型的对象,才可以调用method方法。”其实就这句不明白、、 ...

这句话说的不太准确吧,应该说,只要是Inter类型的对象就可以调用method方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马