接口是否可以实例化?

在asp.net的工厂模式中
会有如下的语句
比如一个接口IContent
IContent i=DALFactory.content.create();
看似返回的是一个sqlserverdal中的content对象,但是复制给了一个接口
貌似接口实例化了,其实不然
找了一下午找到java的解释
一样的吧:
一个论坛中发现的,记下了

那并不是创造接口的实例,接口是不能直接实例化的,就像你说的,得经过实现后才行。
而你列举的java.util.Enumeration arg_names = request.getParameterNames();这个并不是直接实例化,request.getParameterNames();返回的是Enumeration接口被实现后的对象,那是一个向上塑形的过程。可以这么看,实现接口的类可以看作是该接口的子类(这是java实现多重继承的解决方法)。所以那么写是合法的。好比有父类A,B是其子类,那么我们就可以这么写 A a=new B();这里的A就相当于Enumeration ,而new B()就相当于request.getParameterNames();返回的对象。你可以参看下面这个例子:

interface Face{
  String prt();
}

class FaceImpl implements Face{
  public String prt(){
    return "implements Face";
  }
}

class Middle{
  public static Face getFace(){
    return new FaceImpl();
  }

class Last{
  public Last(){
    //下面这句就相当于你的 java.util.Enumeration arg_names = request.getParameterNames();
    Face f = Middle.getFace();
    f.prt();
  }
}

posted @ 2009-08-07 17:53  hellovigoss  阅读(3328)  评论(0编辑  收藏  举报