站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题ResultSet这个接口能产生对象吗?

ResultSet这个接口能产生对象吗?

摘要: ResultSet这个接口能产生对象吗?


帮助文档中的代码如下:
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是这个接口的对象吗?是的话,那接口不就可以产生对象了?


接口是可以产生对象啊。简单的例子:List list = new ArrayList();

你的代码里面的那个 rs 已经不是接口了,而是一个实现ResultSet接口的对象了。


同意楼上,是实现了这个接口的对象.


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


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


接口是可以产生对象的!

接口产生对象的概念应该来源于工厂模式,楼主可以上网搜一下工厂模式的资料看一下!当然,实际上接口生成的对象还是源对类!
用接口生成的对象,它的方法执行体还是类的方法:如:
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();
明白了吗?


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


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


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


↑返回目录
前一篇: 求 一电子表的程序
后一篇: 关于树型分类的实现