一个关于interface的疑惑

superryu 2004-05-10 05:33:01
一个interface应该是用来被implements的,interface里只用方法定义对吧,但我不明白的是,ResultSet也是interface,但我们一般都不是用一个类来implements它,就象
class ClassA implements ResultSet
{}
而一般都是这么来用,定义一个ResultSet变量
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
String str = rs.getString("a");
既然ResultSet是接口,那么它的getString()方法应该只是定义而已,并没有实现,那为什么却可以这样来用呢,而且还可以用接口定义变量?
我对此非常迷惑,还请大家帮我解释一下,谢谢了!
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
superryu 2004-05-11
  • 打赏
  • 举报
回复
十分感谢大家的帮助,让我受益非浅,再次感谢大家!
Brain1977 2004-05-10
  • 打赏
  • 举报
回复
搂主的基本功不扎实啊!
北极猩猩 2004-05-10
  • 打赏
  • 举报
回复
简单的说你用的是ResultSet,但是它实际上是一个实现了该接口的类的对象。

这个类一般是由JDBC Driver的提供这实现的
marvy 2004-05-10
  • 打赏
  • 举报
回复
mark!
无欲则钢 2004-05-10
  • 打赏
  • 举报
回复
接口是用来上塑的,实现多态的,不要以为一个接口就是一个接口,它是一个实现接口的类。
city_goal 2004-05-10
  • 打赏
  • 举报
回复
呵呵。。
用好interface是必要的技能。。。^_^
kingfish 2004-05-10
  • 打赏
  • 举报
回复
ResultSet是接口, 里面只有定义.

接口 = 实现此接口的类的实例.(一个函数能返回的当然是实例)

也就是动态绑定.

如:
interface A{
public void Show();
}

class AA implements A{
public void Show(){

}
}

class BB implements A{
public void Show(){

}
}

class C{

public void Show(A a){ //不必关心到底运行时传入的是AA还是BB类型,只要实现A即可!
a.Show();
}
public static void main(String []args){
C c = new C();

A a = new AA();
c.Show(a);

a = new BB();
c.Show(a);
}
}
maowu 2004-05-10
  • 打赏
  • 举报
回复
你所用的ResultSet rs其实是一个实现了的类,只是你不知道它具体是什么类.
你也不必知道.con.createStatement(..)方法为你创建了一个符合要求的对象,
所有对象都是已经实现了它应该实现的接口的.
也就是说rs.getString("a");已经在你不知道的类里面实现了.
rekcah_ph 2004-05-10
  • 打赏
  • 举报
回复
对!没错!
借口一定要被实现才能使用。
只是这里的实现并不是由你来完成(也不可能由你来完成),而是由数据库厂商或者第三方来实现。
为了方便,前人才定义了接口,这样你就可以在使用的不同数据库时,使用相同的代码。
whyxx 2004-05-10
  • 打赏
  • 举报
回复
ResultSet只是sun提供给外部用的公共接口,真正实现是在JDBC的代码里面,通常我们用ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");看上去是返回的一个ResultSet.实际上取到的是一个ResultSet的实现类.

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧