黑马程序员技术交流社区

标题: 匿名内部类的问题????????? [打印本页]

作者: 彭波    时间: 2013-4-12 16:23
标题: 匿名内部类的问题?????????
本帖最后由 彭波 于 2013-4-13 22:20 编辑

老毕09天-04视频
  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. }
复制代码
Test.function().method();
相当于  Inter in = Test.function(); //这是干啥的啊?是不是创建对象吧?怎么没有new啊,求详解?
                   in.method();

.method():funtion这个方法运算后的结果是一个对象。而且是Inter类型对象。
因为只有是Inter类型的对象,才可以调用method方法。
凭啥说是function运算后结果是个对象啊,依据啥啊???我郁闷!!!
我看怎么像是function方法中调用method方法……












作者: 刘学明       时间: 2013-4-12 16:48
Inter in = Test.function();   这句话就是给创建对象 ,因为Test.function函数中已经有了return new Inter()   这就说明了已经运用了new来创建了一个对象。
  思想上不要固化一条语句只有new才可以创建对象  new已经在函数中出现 所以直接赋值给Inter in 这个Inter型变量就可以。  
作者: 何俊森    时间: 2013-4-12 16:54
本帖最后由 何俊森 于 2013-4-12 16:56 编辑

        return new Inter() // 匿名内部类
                {
                        public void method() {
                                System.out.println("ha");
                        }
                };
创建了一个实现了Inter接口的匿名内部类。 Test.function()表示调用了Test类的静态方法,返回值是一个实现了Inter接口的子类的实例,Test.function().method()。然后在调用了子类中的method()方法。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2