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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭波 中级黑马   /  2013-4-12 16:14  /  1265 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 彭波 于 2013-4-13 22:19 编辑
  1. interface Inter
  2. {
  3.         void method();
  4. }

  5. class Test
  6. {
  7.         /*
  8.         static class Inner implements Inter //内部类实现接口
  9.         {
  10.                 public void method()
  11.                 {
  12.                         System.out.println("haha");
  13.                 }        
  14.         }
  15.         static Inter function()//注意返回的是Inter类类型的对象
  16.         {
  17.                 return new Inner();        
  18.         }
  19.         */
  20.         
  21.         //补足代码,通过匿名内部类
  22.         static Inter function()
  23.         {
  24.                 return new Inter() //匿名内部类
  25.                 {
  26.                         public void method()
  27.                         {
  28.                                 System.out.println("ha");        
  29.                         }
  30.                 };
  31.         }        
  32. }
  33. class InnerClassTest
  34. {
  35.         public static void main(String[] args)
  36.         {
  37.                   Test.function().method();
  38.                 //Test.funtion():Test类中有function函数是静态的。
  39.                 //.method():funtion这个方法运算后的结果是一个对象。而且是Inter类型对象。
  40.                 //因为只有是Inter类型的对象,才可以调用method方法。

  41. //                Inter in = Test.function(); //这是干啥的啊?不是创建对象吧?求详解?
  42. //                in.method();
  43.         }
  44. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
  Inter in = Test.function(); //这是干啥的啊?不是创建对象吧?求详解?
你的 Test类中的function,返回的就是一个Inter接口的子类对象,只不过这个子类对象是用匿名内部类的方法来实例化的
function方法封装了一个创建Inter子类对象的功能能,该功能通过匿名内部类实现。
就是这个意思。就是你注释那部分代码的简化写法。
就是通过function方法创建了一个Inter的子类对象。
in.method();就是Inter的子类对象调用自己的method方法

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
Inter in = Test.function(); //这是干啥的啊?不是创建对象吧?求详解?

首先是调用了Test.functions();表示调用了Test类中的functions()这个方法。
返回了一个Inter的对象,,因为实现了Inter的接口,必须实现他的非私有方法,
所以可以定义一个method()方法,
你这里用的是内部类的方法直接在返回的时候把method()这个新定义的方法返回了。。
也就是 return new Inter() //匿名内部类

26.                {

27.                        public void method()

28.                        {

29.                                System.out.println("ha");        

30.                        }

31.                };



评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
Test 类当中的function()方法创建了Inter又实现了它的method()方法,所以Test.function();获得了Inter对象,所以可以in.method();调用他的方法
回复 使用道具 举报
首先,  
Inter in = Test.function(); //这是干啥的啊?不是创建对象吧?求详解?
Test.function()说明了这个function函数肯定是静态的毫无疑问

然后这个函数返回了一个Inter类型的引用,也就是说在这个函数中一定return了一个Inter对象或其子类的对象

而你写的方法中
static Inter function()
      中不是正好这样吗,创建了一个匿名的内部类,并且返回这个匿名内部对象?
return new Inter() //匿名内部类
                {
                        public void method()
                        {
                                System.out.println("ha");      
                        }
                };
还有疑问,建议再详细看看内部类的视频

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马