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

有关interface,不太明白。。
Statement   sta=con.createStatement();
ResultSet   result=sta.executeQuery( "Select   *   from   class ");

1.上面的这段代码中Statement是一个接口,为什么可以直接调用它的方法executeQuery?
2.而sta.executeQuery( "Select   *   from   class ");返回的是一个ResultSet,那么ResultSet   result=sta.executeQuery( "Select   *   from   class ");是不是就意味着实例化了一个ResultSet??
3.接口中的方法不都是abstract的吗?为什么不实现这些方法就可以直接调用呢??

希望大家能详细地说说,3Q先!!!!!!!!!!!!!

------解决方案--------------------
设计模式中有种模式叫抽象工厂模式,你可以看一下,它应该是通过这种模式得到一个对象,这样可以避免创建多个对象。
------解决方案--------------------
是不是在内部类里实现过这个接口阿。内部类扩展了这个接口的话。
那么就可以用接口Statement调用在内部类里实现的方法拉。

------解决方案--------------------
你不要看等号左边的东西,要看等号右边的东西,con.createStatement() 这样就新建了一个 Statement 的实现类(由数据库驱动程序实现的)。正如楼上朋说说到的,这是一种 Abstract Factory 设计模计。
------解决方案--------------------
面向接口的体现,你在右边做操作时,实际上是获得了一个实际类型的对象,此实际类型恰好是Statement接口的一个实现类。
------解决方案--------------------
有一本叫more effective in java上说得很清楚,
如果能用接口类定义并用其子类来实现对象尽量这样做,
因为这样安全些,你调用该对象时人家根本就不知道你是怎么实现的,当然有些方法接口中没有
必须强制转换成子类对象.


------解决方案--------------------
接口可以指向实现接口的类的对象,然后调用接口上的方法实际上是调用实现该接口的类的对象中的方法。
------解决方案--------------------
你应该恶补一下.多态.
------解决方案--------------------
接口定义了一个类型。如果一个类实现了一个接口,说明它就是这个类型的。这样就可以封装住具体实现。而你看似使用的是一个接口的实例,实际上是调用的实现了这个接口的某个类的具体实现。
------解决方案--------------------
留名
------解决方案--------------------

多态
简单工厂模式
抽象工厂模式
工厂方法模式

这些东西真正理解了,接口也就自然明白了
------解决方案--------------------
//javadoc:返回一个新的默认 Statement 对象
createStatement
Statement createStatement()
throws SQLException创建一个 Statement 对象来将 SQL 语句发送到数据库。没有参数的 SQL 语句通常使用 Statement 对象执行。如果多次执行相同的 SQL 语句,使用 PreparedStatement 对象可能更有效。
使用返回的 Statement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。


返回:
一个新的默认 Statement 对象
抛出:
SQLException - 如果发生数据库访问错误


//javadoc:语句返回单个 ResultSet 对象。
executeQuery
ResultSet executeQuery(String sql)
throws SQLException执行给定的 SQL 语句,该语句返回单个 ResultSet 对象。

参数:
sql - 要发送给数据库的 SQL 语句,通常为静态 SQL SELECT 语句
返回:
包含给定查询所生成数据的 ResultSet 对象;永远不能为 null
抛出:
SQLException - 如果发生数据库访问错误或者给定 SQL 语句生成单个 ResultSet 对象之外的任何其他内容


------解决方案--------------------
多态性里面有写 有共同的方法, 就是说A同学学的专业和B同学学的专业都是机械专业,
第一个从事的是汽车,第二个从事的是飞机,有共业的专业技能就像机械,还有机械绘图。 可能这就是继承接口的方法,但是继承的类只是有共同的方法,但是结果却不一样?
------------------------------------------
我也不知道说得对不对?
------解决方案--------------------
接口没实例,需要实现类创建对象,接口只是引用,可以指向任何实现类的对象,达到多态效果