日期:2014-05-20  浏览次数:20667 次

数据库 接口
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@lxc-PC:1521:orcl", "scott", "tiger");


这里的getConnection 返回Connection类型 也就是说是返回一个接口类型 ? 接口也可以返回么 那么现在conn里面存储的是什么

------解决方案--------------------
返回的不是接口,而是实现该接口的类的实例。
------解决方案--------------------
当然可以返回接口类型

这种编程方法在java的好几个设计模式中(比如装饰模式,代理模式)中都有很多应用。

简单来讲,就是如果你设计了10个类都implement这个Connection接口,而且现在当你设计一个Database类中以Connection接口作为成员,
Java code

public class Database{
    private Connection conn;

    // setter
    public void setConn(Connection conn){
        this.conn=conn;
    }
    
    // getter
    public Connection getConn(){
        return this.conn;
    }
}

------解决方案--------------------
Connection 接口 实现类的引用。
------解决方案--------------------
再回答“那么现在conn里面存储的是什么”

通俗的说
实现接口的类中的内容肯定比接口中的内容只多不少。比如接口中的方法很多没有内容只有一个“壳”,但是实现类中就有具体的内容了。这个“具体的内容” 依各类而不同,成为一种“个性”,所以不能成为一种“共性”作为参数。

打个比方就和电脑的USB接口一个道理

方法返回接口对象,其实就是返回一个USB插口给你(那个“壳”),本身USB接口不能做任何事情。具体的实现类负责做该做的事情,所以具体类负责设计此类到底是USB鼠标还是摄像头还是游戏手柄。但是USB接口的优点就是所有的这些USB设备都可以插入同一个插槽(利用那个“壳”),就如同可以作为接口对象传入方法
------解决方案--------------------
靠,不小心点了发帖,还没说完

那么现在conn里面存储的,就是一个具体的类对象的指针,它在程序里的身份,不是USB鼠标,不是USB键盘,不是USB手柄,而是叫做“USB设备”(接口类型),但是其指向的内容和具体的设备没区别,在必要的时候只需要强制转换出来就好