在Hibernate帮助文档中看到这个这个例子
SessionFactory sessionFactory = config.buildSessionFactory();         Session session = sessionFactory.openSession(); 
Session 和 SessionFactory 都是接口,为什么能声明一个Session类型的实例,并赋值呢?
请多多指点

解决方案 »

  1.   

    InterfaceA IA = new IterfaceAImpl();明白?
      

  2.   

    接口 a = new 实现该接口的类();针对接口写的代码具有极大的通用性,也是面向对象的重要特性之一
      

  3.   

    用的最多的例子:
    List list = new ArrayList();
    一样的道理。。
      

  4.   

    唉?我们老师告诉我们如果是接口类的话是不能够用 “new”来创建实例的吧?只能用接口类里的一些赋值的方法来初始化实例呀`~
      

  5.   

    的确不能直接new,但可以通过接口的实现类来new啊。
    如:List list = new ArrayList();
      

  6.   

    面向接口编程
    List是接口,有两个类实现了它,ArrayList类和LinkedList类。List类型要大于它的了两个派生类型。
    在 List list = new ArrayList(); 这句:
    因为 List 是接口,所以 list 对象可以由 ArrayList 向上转型成它的接口 List,我们就直接对 List 接口进行编程。
    接口只能作为类型,类才能实例化。
      

  7.   

    非常感谢大家的解答,呵呵,可能是我没说清楚,其实我想问的是两个问题import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    //     这是类库文档  http://www.hibernate.org/hib_docs/v3/api/SessionFactory sessionFactory = config.buildSessionFactory();
    Session session = sessionFactory.openSession(); 按照大家给出的解释,如果sessionFactory变量是一个被实例化后的SessionFactory类型的对象的话,就没什么问题了。
    可是,SessionFactory 只是一个接口,而不是类,那为什么能够把config.buildSessionFactory()赋给SessionFactory类型的变量sessionFactory呢?sessionFactory被赋予的是哪个类的对象呢?我查了hibernate的api,只是说 Instantiate a new SessionFactory, using the properties and mappings in this configuration.并没有说是产生哪个类的对象。请大家帮忙,呵呵
      

  8.   

    楼主基础不过关就玩hibernate,汗一个~~~~~~~ 创建一个SessionFactory,并不一定要指明具体是哪个SessionFactory,只要它实现了SessionFactory中的方法即可。就像你饿了时候会说,“来点儿吃的”,你并不在乎具体是什么食物,只要是能吃的就行。
      

  9.   

    虽然我没看过hibernate的API,但是可以猜到config.buildSessionFactory()大概是这么写的
    public 类名 buildSessionFactory()
    {
        ……
        return (new 类名);
    }
    大概就是这样的,这样附值给sessionFactory就没有什么问题了。
      

  10.   

    我说一句废话吧:sessionFactory肯定是接口SessionFactory的某个实现类的一个实例
      

  11.   

    你把得到的对象toString()一下,可以看到它的地址,前边部分就是这个对应的class ,你看看,应该是SessionFactory的一个实现,而不是SessionFactory本身。
      

  12.   

    不能,他跟抽象类一样都不能用new来实现
    接口就是为了实现多重继承,没必要去实例化
      

  13.   

    sessionFactory 只是一个引用,它可以指向任何一个实现了 SessionFactory 接口的类的实例。而 config.buildSessionFactory() 返回的正是一个实现了 SessionFactory 接口的类的实例的引用,而不是 SessionFactory 接口的实例的引用。
      

  14.   

    学习了,我是编程新手,最近正在烦恼这句呢:
    IWorkspaceFactory pWorkspaceFactory= new ShapefileWorkspaceFactory();
    其中:IWorkspaceFactory,ShapefileWorkspaceFactory都是接口,作何解释?请求高手赐教。