接口不是不能实例化吗,那连接数据库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接口的实现类才对,要不然一个接口,谁来实现它? 展开
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接口的实现类才对,要不然一个接口,谁来实现它? 展开
3个回答
展开全部
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是接口类型,但是通过一个方法函数获得了一个实现这个接口的类的实例。
展开全部
DriverManager.getConnection这个方法的返回值,是一个Connection的实现类
//以下是API里的说明,
static Connection
getConnection(String url, Properties info)
不过这个实现类你看不到,因为他被封装到了数据库的驱动包里了 比如Oracle数据库的驱动包里有一个类叫 ConnectionByOracle (具体名字记不清楚了)就是这样定义的
class ConnectionByOracle implements Connection //实现了该接口
而通过 DriverManager.getConnection() 这个方法就可以返回该类
//以下是API里的说明,
static Connection
getConnection(String url, Properties info)
不过这个实现类你看不到,因为他被封装到了数据库的驱动包里了 比如Oracle数据库的驱动包里有一个类叫 ConnectionByOracle (具体名字记不清楚了)就是这样定义的
class ConnectionByOracle implements Connection //实现了该接口
而通过 DriverManager.getConnection() 这个方法就可以返回该类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Connection这个接口,实现类不是由JAVA的API实现的,而是由数据库的厂商实现,JAVA API只是规定出一个规范,告诉他们怎样用统一的方法获取Connection类实例,这就是为什么你没在文档中没有看到Connection实现类的原因。
按你的说法,如果DriverManager.getConnection方法,返回了具体的实现类,应该返回什么类呢,数据库可是有很多种的,总不能对每一种数据库都写一个方法返回不同的实现类吧。
java最大的特点就是制定规范,具体过程由他人实现,另外返回接口也是JAVA方法的一个特点,接口可以接收实现类实例,所以无论别人返回什么实现类,getConnection方法都能通用。
按你的说法,如果DriverManager.getConnection方法,返回了具体的实现类,应该返回什么类呢,数据库可是有很多种的,总不能对每一种数据库都写一个方法返回不同的实现类吧。
java最大的特点就是制定规范,具体过程由他人实现,另外返回接口也是JAVA方法的一个特点,接口可以接收实现类实例,所以无论别人返回什么实现类,getConnection方法都能通用。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询