0

这感觉像是一个愚蠢的问题,但它让我更加恼火,因为我不明白这些方法是在哪里声明的。在我的代码中,我可以做类似的事情(显然这是一个伪代码)

ResultSet rs = DB.getConnection.sendSQL(select * from [table])

我知道 SQL 的发送返回一个“结果集”,虽然“结果集”只是一个接口,但返回的对象实现了该接口。

我的问题是返回的对象如何实现该接口?从我读到的接口只能定义一个方法签名,而不是一个完整的功能。

那么函数在哪里定义呢?显然不在 ResultSet 界面中!我是否正确理解这是数据库驱动程序的工作?(我想我可能刚刚回答了我自己的问题)。

我可以用功能齐全的方法编写接口吗?然后任何实现类会自动实现该方法,还是我只是通过调用“super”或其他东西来覆盖它?

我刚刚在 SO 上找到了另一个问题 ,预定义接口(如 Connection、Statement 等)的抽象方法如何在没有正文的情况下执行某些任务? 这是一个完美的副本,但更好地制定。和一个很好的答案

4

3 回答 3

1

我的问题是返回的对象如何实现该接口?

class ResultSetImpl implements ResultSet { ... }

从我读到的接口只能定义一个方法签名,而不是一个完整的功能。那么函数在哪里定义呢?明显不在ResultSet界面!

在返回的对象中。在点;-)

这是非常基本的Java。

于 2012-09-05T08:44:25.023 回答
1

实现接口的类负责声明接口中的所有方法,并在适当的情况下实现这些方法的内部逻辑。

界面本质上是说“你必须为此提供功能,但我不在乎你是如何做到的。你只需要接受这些类型的输入并提供这种类型的输出。” 该类是您实现如何从输入到输出的地方。

于 2012-09-05T08:48:01.007 回答
1

让我们看下面的场景:

我们有一个接口:

public interface Expendable(){
  public void expend();
}

以及一个实现它的类:

public class MyClass implements Expendable(){
  public void expend(){
//Do something
}
}

另一个类在方法中返回一个实现我们接口的对象:

public class OtherClass(){
  public Expendable myMethod(){
   return new MyClass();
}
}

OtherClass myMethodClass返回一个实现接口的对象(光看方法返回类型我们不知道它是什么) Expendable。当前的 Expend 方法是在 myMethod 返回的实际类中定义的。在这种情况下,如果您这样做,则调用的方法

new OtherClass.myMethod().expend();

是 MyClass 扩展方法。

于 2012-09-05T08:56:09.570 回答