一个接口也可以生成实例。
关于DriverManager.getConnection()这个方法,一些英文书里把get×××()方法叫做factory方法,可以理解为由某个类产生一个对象,而不是显示的new一个对象,这就与java的内部设计有关,这是我的理解。
关于DriverManager.getConnection()这个方法,一些英文书里把get×××()方法叫做factory方法,可以理解为由某个类产生一个对象,而不是显示的new一个对象,这就与java的内部设计有关,这是我的理解。
完全可以用下面方法取得接口的实现public Interface1 getInterface1() {
return new Interface1Impl();
}
如果加上static
public static Interface1 getInterface1() {
return new Interface1Impl();
}
可以构成Factory
这也是一直提倡的实现和接口分离 。。客户端面对的只是接口 不知道具体的实现
这个BEAN中的一个方法,getConnection()实现的功能可能是连接数据库,也可以是连接池等等。
作为对很多对象的操作,connection是必需的
那么DriverManager.getConnection()返回的是一个对象吗???
为什么部这样写Connection conn=(Connection)DriverManager.getConnection();
当然不能这样。接口只有被赋予一个具体的实现才可以被客户端来用。 如果像这样的话客户端是不能拿一个接口来用的。 而且接口也不能被实例化。
它就说了接口类型变量可以存储实现该接口的任何类对象的引用。这也就是你的问题答案所在。
Connection conn是个连接,它从DriverManager.getConnection()方法得到一个与数据库的连接。getConnection()此方法有三个带不同参数的类型。不过都是说要连接到哪个数据库和用什么名字密码或参数连接到数据库。
对吗?这样是显式的,如果这样Connection conn=DriverManager.getConnection();则式隐式的是这样吗?
所以强制类型的转换是没有必要的。
虽然完全没有用,但当然这样做也是没有错的
那是不是必须这样写Connection conn=(Connection)DriverManager.getConnection();呢??
Connection conn=(Connection)DriverManager.getConnection();和
Connection conn=DriverManager.getConnection();的意思是一样的。作用也一样,同样是将返回的实例向上转型。但如果你向上转了,你的实例也就只能提供给你它交类的所有可用方法。子类后添加的方法你将无法再使用了。 这是一个要注意的地方。说第二个,Driver DriverRS = (Driver)Class.forName(MM_test_DRIVER).newInstance();
我觉得这个是不是DW怕你加载的不是驱动而特意做了一次转换。不过不管怎么说,不加那个也一样可以。