接口不是不能实例化吗,那连接数据库Connection这个接口怎么实现的?

publicConnectionconn()throwException{try{if(conn==null||conn.isClosed()){this.conn=Dr... public Connection conn() throw Exception{
try {
if(conn==null || conn.isClosed()){
this.conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);

return this.conn;
}

我们都知道接口不能实例化,只能靠实现接口的类实例化。
那上面这个Connect是接口,那它的对象conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);
表示什么意思?我知道DriverManager是个类,然后调用getConnection方法,这个方法的返回值
是Connection类型。
那我就奇怪了,我看帮助文档上也没说DriverManager类是Connection接口的实现类,也不是它的子接口,为什么this.conn=DriverManager.getConnection?
而且Connection的实现类是什么?我在帮助文档里没有看到啊。
但是我感觉在DriverManager这个类里面的getConnection方法里,最后应该是得到了一个实现Connection接口的实现类才对,要不然一个接口,谁来实现它?
展开
 我来答
raycar0524
推荐于2017-11-28 · TA获得超过4683个赞
知道小有建树答主
回答量:812
采纳率:0%
帮助的人:635万
展开全部

Connection接口首先被一个类实现,然后在DriverManager的getConnection方法里创建了这个类的一个实例,然后被返回。只不过这个类叫什么,没有说明而已,因为这个类的主要目的是实现了Connection的方法,它叫什么名字并不重要。

给你个小例子吧,跟这个是一样的原理:

有三个文件,Interface1.java,InterImpl.java,Main.java

首先是Interface1.java,只定义了一个函数t1

public interface Interface1 {
    public String t1();
}

然后是实现Interface1的类InterImpl.java

public class InterImpl implements Interface1 {

    @Override
    public String t1() {
        // TODO Auto-generated method stub
        return "string t1";
    }

}

最后是主类Main.java

public class Main {
    public static Interface1 rt1() {
        return new InterImpl();
    }
    
    public static void main(String[] args) {
        Interface1 i = Main.rt1();
    }
}

看到了吧,主类里的变量i是接口类型,但是通过一个方法函数获得了一个实现这个接口的类的实例。

yangyiko1
2013-08-01 · 超过36用户采纳过TA的回答
知道答主
回答量:134
采纳率:0%
帮助的人:79.9万
展开全部
DriverManager.getConnection这个方法的返回值,是一个Connection的实现类

//以下是API里的说明,
static Connection
getConnection(String url, Properties info)

不过这个实现类你看不到,因为他被封装到了数据库的驱动包里了 比如Oracle数据库的驱动包里有一个类叫 ConnectionByOracle (具体名字记不清楚了)就是这样定义的
class ConnectionByOracle implements Connection //实现了该接口

而通过 DriverManager.getConnection() 这个方法就可以返回该类
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lufei_200x
2013-08-01 · TA获得超过2733个赞
知道小有建树答主
回答量:280
采纳率:0%
帮助的人:310万
展开全部
Connection这个接口,实现类不是由JAVA的API实现的,而是由数据库的厂商实现,JAVA API只是规定出一个规范,告诉他们怎样用统一的方法获取Connection类实例,这就是为什么你没在文档中没有看到Connection实现类的原因。
按你的说法,如果DriverManager.getConnection方法,返回了具体的实现类,应该返回什么类呢,数据库可是有很多种的,总不能对每一种数据库都写一个方法返回不同的实现类吧。
java最大的特点就是制定规范,具体过程由他人实现,另外返回接口也是JAVA方法的一个特点,接口可以接收实现类实例,所以无论别人返回什么实现类,getConnection方法都能通用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式