think in java 200页上面那个例子 public static ServiceFactory factory =
  new  ServiceFactory (){
     public Service getService(){
           return new implementation1();
     }
}接口ServiceFactory 是如何被new 出来的? 有木有技术宅 解答下
感激不已!~~~~~

解决方案 »

  1.   

    补充一点
    大家看仔细 ServiceFactory 接口没有实现类!~~
      

  2.   

    接口不能实现一个实例,但在匿名类中,切可以用 new + 接口名 实现一个匿名类。
      

  3.   

    return new implementation1();在这里面产生出一个Service object
      

  4.   

    3楼 可是他的引用是ServiceFactory类型的不是么? 最后产生了个 Service object 这不科学..
      

  5.   

    你可以这么理解?
    实例化一个实现了该接口的类的对象,并把找个对象赋给接口ServiceFactory的对象。
    而实现了该接口的类就是那个匿名内部类,该内部类只能在此处被使用一次。
    (){
         public Service getService(){
               return new implementation1();
         }
    }
    这其实就是一个类,只不过这个类没有名字而已,就这样。
      

  6.   

    接口只能通过类来实现或者被类来继承,而不能实例化,也就是new
      

  7.   

    可能是jdk提供的 吧 呵呵
      

  8.   

    这是java的匿名类,建议楼主该看基础了
      

  9.   

    这位兄弟,是这样子的, interface 不能new 是对的,你这里并不是 new interfere,而是实现了该 interface 的一个类,该类,因为目的只是为了实现 该interferface,而没有其他功能,所以把它匿名了,我说的你明白了么?;
    花括号部分就是 该匿名内部类的实现该 interface 的方法的部分,
    注意的是后面要有 分号哦。。呵呵
      

  10.   

    产生Service?回去补基础吧。
    “产生Service”的是你的被实例化的接口的一段方法代码。
    我有一个类叫做Student,里面有一个getName方法返回一个字符串,不科学吗?
      

  11.   

    重点看红色部分
    new  ServiceFactory (){
         public Service getService(){
               return new implementation1();
         }
    }

    这部分就是匿名内部类,实现了你的接口,通过子类实现借口的实例化。
    这就是你的实现类。
      

  12.   

    ServiceFactory 是一个接口就可以吧
      

  13.   

    一上来就看《think in java》不太好吧
      

  14.   

    匿名内部类,相当于你new 出来的那一块是实现了ServiceFactory 的类的一个对象。
      

  15.   

    匿名类。swt和swing中实现listener很常见。
      

  16.   

    匿名类 ,可以看看编译后的.class文件