在JDBC中常见这样的代码:
Class.forName("...");
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
可Connection,Statement,ResultSet都是接口啊,里面的方法是空的,可实现这些接口的类在什么时候实现的
分不够可以加

解决方案 »

  1.   

    Class.forName("...")的时候就是加载驱动的过程,比如说加载JDBC驱动
    然后调用 getConnection 方法时,DriverManager 会试着从初始化时加载的那些驱动程序以及使用与当前 applet 或应用程序相同的类加载器显式加载的那些驱动程序中查找合适的驱动程序。
    这些驱动就是接口的实现。
    用接口作为数据类型
      

  2.   

    这些函数返回的都是一个对象引用,而这个对象所属的类实现了那些相关的接口。
    但这些数据驱动的开发者不一定需要把这些实现类的具体信息公开出来,仅此而已。比如下面这样:interface A {
        void f();
    }public class AFactory {
        public A getAnInstance() {
            return new B();
        }
    }// 一个实现了接口A的类,但是private的,外界看不到。
    private class B implements A {
        public void f() {
            return;
        }
    }当然,这只是个例子,也可以使用内部类的方法实现,但总之主要的思想是:实现者只承诺返回了一个实现了某接口的对象,因此外界可以通过接口方法进行调用,但这个类是怎么来的,实现者不愿或感觉没必要公开。
    这也符合面向对象设计中某些关于信息隐藏的原则。
      

  3.   

    哦,上面写的这个例子中出了一点小疏漏,不可以用类外部的private类的,一个类只可以实例化自己内部的private类,但可以使用位于同一包内的拥有默认访问权限(非public)的类。
      

  4.   

    http://www.mikecat.net/blogview.asp?logID=1397
      

  5.   

    up---------------------------------------------------------------------------------------------
    腰缠70元到月入近10万
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=453IT工程师 毕业4年我年薪涨到30万 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=51126岁青年坐拥千万域名资产 从小玩家变成CEO 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=515程序员的酸甜苦辣:告别Coding 
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=341从月薪3500到700万(一)
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=170网络草根月赚3000的十种方法
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=517如果我是女的 我肯定不会嫁给做网站的
    http://www.hunbei.com.cn/Article/ArticleShow.asp?ArticleID=512
      

  6.   

    路过,友情UP
    --------------------------------------------------------------------------------
    JSP开发群:8137004由于群早满了,申请加入群的要求是基本天天在线,并且经常发言者(因为不定时清理),并注明csdn.