看过hibernate的API,看到Session是一个接口,但当我们持久化一个对象的时候,比如实例化一个Session session = sessionfactory.openSession();这时却用到session.beginTransaction();并且后面当我们持久化对象时也用到了session.save(Class);这样的方法究竟是怎么定义的呢?不是说接口里面的方法都没有实现体吗?那么我们那样子调用为什么会没有出错呢?

解决方案 »

  1.   

    sessionfactory.openSession();返回了一个实现了Session这个接口的类的实例 
      

  2.   

    完全是多态概念啊,这个怎么还能有疑问呢,基础没学好啊public interface Session {
      public Transaction beginTransaction();
      public void save(Object o);
    }public class XxxxSession implements Session {
      public void save(Object o) {
       ....... 
     }
    }Session session = new XxxxSession();
    session.save(...);
      

  3.   

    你拿到session对象实际上是Session接口的实现类,所有的方法实现都是在这个实现类里面的 在Eclipse里面选中Session,ctrl+T,可以找到对应的实现类  
      

  4.   

    sessionfactory调用方法返回一个实现session的对象。