帮助文档中的代码如下:
Statement stmt = con.createStatement(
                                      ResultSet.TYPE_SCROLL_INSENSITIVE,
                                      ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
rs.getInt(1);//这一行是我自己加的,getInt()这个方法是ResultSet接口的我的疑问:rs是这个接口的对象吗?是的话,那接口不就可以产生对象了?

解决方案 »

  1.   

    接口是可以产生对象啊。简单的例子:List list = new ArrayList();你的代码里面的那个 rs 已经不是接口了,而是一个实现ResultSet接口的对象了。
      

  2.   

    实际情况好像不是这样的,在别的论坛上就有人解释说,rs是stmt.executeQuery("SELECT a, b FROM TABLE2")产生的对象,并不是这个接口new出来的,也就是说rs是实现了ResultSet这个接口的类产生的对象
      

  3.   

    List list = new ArrayList();应该是简写形式的吧?
      

  4.   

    接口是可以产生对象的!接口产生对象的概念应该来源于工厂模式,楼主可以上网搜一下工厂模式的资料看一下!当然,实际上接口生成的对象还是源对类!
    用接口生成的对象,它的方法执行体还是类的方法:如:
    interface A{
       getInt()
    }
    class B implements A{
        int i;
        getInt(){
          return i;
        }
    }
    那么,以工厂模式的原理,我们可以这样用
    A a=new B();
    此处的a只有getInt()方法可以用,调不了i,当然,a.getInt()实际上执行的是B.getInt()。
    这样用主要是在多层系统中处理安全的问题以及通过一个interface生成多种对象的问题(工厂模式)
    刚才的例子还可以这样用:
    interface A{
       getInt()
    }
    class B implements A{
        int i;
        getInt(){
          return i;
        }
    }A a=new B();
    B b=(B)a;
    b.i的调用;
    b.getInt();
    明白了吗?
      

  5.   

    多谢楼上的详细解释,按照楼上所说A a=new B(),那么,a就是A的对象了吗?
    如同ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2"),rs是ResultSet的对象吗?
      

  6.   

    a仍是B的对象!想一下:我们用(B)a还是可以反向得到B的对象的。
    我们应该这样说:
    a是用A封装了的B的对象
      

  7.   

    或者说(B)a是把a还原成B对象好听点,呵呵,
    反正,这只是一种封装技术,,用多了,就明白了!呵呵