当前页面: 开发资料首页 → 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对象好听点,呵呵,
反正,这只是一种封装技术,,用多了,就明白了!呵呵