一个接口也可以生成实例。
关于DriverManager.getConnection()这个方法,一些英文书里把get×××()方法叫做factory方法,可以理解为由某个类产生一个对象,而不是显示的new一个对象,这就与java的内部设计有关,这是我的理解。

解决方案 »

  1.   

    这是向上转型定义接口 Interface1()  实现类 Interface1Impl() 
    完全可以用下面方法取得接口的实现public Interface1 getInterface1() {
      return new Interface1Impl();
    }
    如果加上static  
    public static Interface1 getInterface1() {
      return new Interface1Impl();
    }
     
    可以构成Factory
    这也是一直提倡的实现和接口分离 。。客户端面对的只是接口 不知道具体的实现
      

  2.   

    DriverManager.getConnection()如果你用的JSP那么DriverManager又可能是一个JAVABEAN
    这个BEAN中的一个方法,getConnection()实现的功能可能是连接数据库,也可以是连接池等等。
    作为对很多对象的操作,connection是必需的
      

  3.   

    Connection是一个接口,conn也就是一个接口变量
    那么DriverManager.getConnection()返回的是一个对象吗???
    为什么部这样写Connection conn=(Connection)DriverManager.getConnection();
      

  4.   

    Connection conn=(Connection)DriverManager.getConnection();
    当然不能这样。接口只有被赋予一个具体的实现才可以被客户端来用。 如果像这样的话客户端是不能拿一个接口来用的。 而且接口也不能被实例化。
      

  5.   

    那为什么DW MX里会自动生成这么一句:Driver DriverRS = (Driver)Class.forName(MM_test_DRIVER).newInstance();虽然这样写Class.forName(MM_test_DRIVER).newInstance();就可以了,但Driver DriverRS = (Driver)Class.forName(MM_test_DRIVER).newInstance();这样不会编译出错
      

  6.   

    你翻开电子工业出版社的 wrox的书的 java2编程指南  的250面。
    它就说了接口类型变量可以存储实现该接口的任何类对象的引用。这也就是你的问题答案所在。
      

  7.   

    Connection conn=DriverManager.getConnection();
    Connection conn是个连接,它从DriverManager.getConnection()方法得到一个与数据库的连接。getConnection()此方法有三个带不同参数的类型。不过都是说要连接到哪个数据库和用什么名字密码或参数连接到数据库。
      

  8.   

    我觉得这样写是没有错的:Connection conn=(Connection)DriverManager.getConnection();
    对吗?这样是显式的,如果这样Connection conn=DriverManager.getConnection();则式隐式的是这样吗?
      

  9.   

    DriverManager.getConnection();本身就是返回Connection
    所以强制类型的转换是没有必要的。
    虽然完全没有用,但当然这样做也是没有错的
      

  10.   

    返回一个connection借口啊,借口不能示例化
      

  11.   

    假设DriverManager.getConnection();返回的不是 Connection
    那是不是必须这样写Connection conn=(Connection)DriverManager.getConnection();呢??
      

  12.   

    Connection conn=(Connection)DriverManager.getConnection();Driver DriverRS = (Driver)Class.forName(MM_test_DRIVER).newInstance();关于这二句是这样的。道先说第一句,Connection是一个接口,DriverManager.getConnection();反回一个实现该接口的具体实例。
    Connection conn=(Connection)DriverManager.getConnection();和
    Connection conn=DriverManager.getConnection();的意思是一样的。作用也一样,同样是将返回的实例向上转型。但如果你向上转了,你的实例也就只能提供给你它交类的所有可用方法。子类后添加的方法你将无法再使用了。 这是一个要注意的地方。说第二个,Driver DriverRS = (Driver)Class.forName(MM_test_DRIVER).newInstance();
    我觉得这个是不是DW怕你加载的不是驱动而特意做了一次转换。不过不管怎么说,不加那个也一样可以。