【发布时间】:2015-05-29 16:00:30
【问题描述】:
由于某些原因,我正在查看 rt.jar,并且在那里我看到了一些包,例如 java.sql.* 等。
在我们编写的典型 jdbc 程序中(例如,对于 Connection 类):
import java.sql.Connection;
根据文档,java.sql.Connection 是接口,而不是具体实现,而 java.sql.Connection 在 rt.jar 中。
当我们编写jdbc程序时,我们需要jdbc驱动程序,而我读到的jdbc驱动程序实现了接口(例如java.sql.Connection)。
所以当我们编写典型的java程序时:(并加载jdbc驱动)
import java.sql.Connection;
--> java.sql.Connection 是来自 rt.jar 还是来自驱动类。
据我推测,在这种情况下 java.sql.Connection 必须来自 rt.jar(作为接口),而实际实现来自驱动程序类。
如果我的假设是正确的,通常我们需要包含具有接口定义的 jar 以包含导入。
例如,考虑这种情况:
package com.vipin.myinterface;
public interface Interface1 {
public void print();
}
如果我们把上面的接口打包成interface1.jar。
假设 Concrete1.java 实现了这个接口:
package com.vipin.concrete1;
public class Concrete1 implements Interface1 {
public void print () {
//code
}
}
并且这个打包在 jar 中-->concrete1.jar。
现在,假设我正在编写一个使用 print() 方法的应用程序,那么我需要同时包含这两个 jar 吗?
【问题讨论】:
-
@bayou.io 你为什么不写一个答案?
-
@Würgspaß - 因为我很懒? :)
-
@bayou.io 或者可能是因为您无法就该主题给出适当的解释。
-
@Würgspaß 我没有看到这样正确的解释,实际上我只看到两个问题:这是如何完成的? 和 我可以像它一样简单地做到这一点看起来像?
-
@bayou.io 我不是这么说的。您可以知道某些东西是如何工作的,但在向其他人解释这一点时可能会遇到问题。这不会让你变得愚蠢,只是很难表达自己:)