操作数据库要用到ResultSet     也就是ResultSet rs =Statement对象.execute(SQL);这里的语句创建了ResultSet 对象  。接口为什么能实例化一个对象呢?  而且 我在查看API帮助文档时发现不光是ResultSet接口    还有Connection,Statement 也都是接口。    他们都没有实现方法为什么还可以调用他们的方法?
 

解决方案 »

  1.   

    这个问题太申奥了要去问问数据库厂商到底有没有实现这个接口~~~~
    其实用winrar打开jdbc驱动.jar 就能看到,比如oracle:
    classes12.zip\oracle\jdbc\OracleResultSet.class
    可惜找不到.java来看看
      

  2.   

    接口是一个规范,实现它的可能是Sun公司的,也可能是其他公司的,这也是接口的好处之一
    只定义规范,可以让别的厂家自由实现.就像数据库方面
    首先要 Class.forName(....);这个先注册一个驱动,实际上它里面一个静态块,它会往 DriverManager中的静态变量中与写入 Connection的实现类
    Connection conn=DriverManager.getConnection(...);这个方法就会取得刚才注册的实现类
    这样,conn就是一个实际上已经实现的类,而不是纯接口对象(纯接口是没办法实例化的)
    通过conn,你就可以得到其他接口的实现类的对象了
      

  3.   


    有点迷糊   ~~~
    Connection conn=DriverManager.getConnection(...);如果DriverManager.getConnection(...)这个方法返回了 一个实现接口的类,那么是不是应该接受这个实现类的变量应该是类型为这个实现类的一个实例化的对象呢?  不应该是一个接口类型的对象啊(其实接口是不是不能实例化呀?)~~
      

  4.   

    这就是基于接口编程的优势,Connection是接口,conn则是该接口的实现类的引用,很自然的就可以调用接口的方法,如果实现类换了,比如原来用的mysql的驱动程序,换为oracle的驱动程序,代码不用改的,同样可以调用Connection接口的方法
      

  5.   

    Class DriverManager 
    static Connection getConnection(String url) 
              Attempts to establish a connection to the given database URL. http://www.javaeye.com/topic/503033
         
      

  6.   

    楼主没有理解接口的意义接口虽然只是定义了一些方法,但最终它是需要被实现才有意义。并且一个类如果实现了一个接口,那么这个类的实例也就具有了这个接口的类型,也就是说可以把这个对象当作这个接口的一个实例。比如
    interface MyInterface {}
    class MyClass implements MyInterface {}那么程序中就可以这样做:
    MyInterface obj = new MyClass();
    那么在
    Connection conn = DriverManager.getConnection(......);
    这条语句中的 conn 实质上是一个实现了 Connection 接口的一个类的实例。这个 conn 的类型会根据数据库厂商的不同而不同,但这些类都实现了 Connection 接口。你可以通过 
    Class cls = conn.getClass();
    得到它的类的信息,看它的类的完整名字,实现了哪些接口,有哪些方法
      

  7.   

    就是如此,接口编程,实现留给厂商。
    楼主可以在eclipse editor选中ResultSet 再按住ctrl+t快捷键,就可以看到实现类了