Java 被返回接口的对象如何声明其方法

Java 被返回接口的对象如何声明其方法,java,interface,Java,Interface,这感觉像是一个愚蠢的问题,但它激怒了我,因为我不明白方法在哪里声明。在我的代码中,我可以做如下事情(显然这是一段伪代码) 我理解SQL的发送返回一个“结果集”,尽管“结果集”只是一个接口,但返回的对象实现了该接口 我的问题是返回的对象如何实现该接口?据我所知,接口只能定义一个方法签名,而不是一个完整的函数 那么函数是在哪里定义的呢?显然不在ResultSet界面中!我理解这是数据库驱动程序的工作,对吗?(我想我可能刚刚回答了我自己的问题) 我可以用一个功能齐全的方法编写接口吗?然后任何实现类都会

这感觉像是一个愚蠢的问题,但它激怒了我,因为我不明白方法在哪里声明。在我的代码中,我可以做如下事情(显然这是一段伪代码)

我理解SQL的发送返回一个“结果集”,尽管“结果集”只是一个接口,但返回的对象实现了该接口

我的问题是返回的对象如何实现该接口?据我所知,接口只能定义一个方法签名,而不是一个完整的函数

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

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

我刚刚发现另一个问题是这样的 这是一个完美的复制品,但更好。这是一个很好的答案

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

据我所知,接口只能定义一个方法签名,而不是一个完整的函数。那么函数是在哪里定义的呢?显然不在ResultSet界面中

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

这是非常基本的Java

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

据我所知,接口只能定义一个方法签名,而不是一个完整的函数。那么函数是在哪里定义的呢?显然不在ResultSet界面中

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


这是非常基本的Java。

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


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

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


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

让我们来看以下场景:

我们有一个接口:

public interface Expendable(){
  public void expend();
}
public class OtherClass(){
  public Expendable myMethod(){
   return new MyClass();
}
}
以及实现它的类:

public class MyClass implements Expendable(){
  public void expend(){
//Do something
}
}
另一个类在方法中返回一个实现接口的对象:

public interface Expendable(){
  public void expend();
}
public class OtherClass(){
  public Expendable myMethod(){
   return new MyClass();
}
}
OtherClass myMethod
返回一个对象(我们不知道是什么
Class
只是通过查看方法返回类型),该对象实现了
可消耗的
接口。当前Expense方法是在myMethod返回的实际类中定义的。在本例中,如果您这样做,将调用谁的方法

new OtherClass.myMethod().expend();

是MyClass Expense方法。

让我们采用以下场景:

我们有一个接口:

public interface Expendable(){
  public void expend();
}
public class OtherClass(){
  public Expendable myMethod(){
   return new MyClass();
}
}
以及实现它的类:

public class MyClass implements Expendable(){
  public void expend(){
//Do something
}
}
另一个类在方法中返回一个实现接口的对象:

public interface Expendable(){
  public void expend();
}
public class OtherClass(){
  public Expendable myMethod(){
   return new MyClass();
}
}
OtherClass myMethod
返回一个对象(我们不知道是什么
Class
只是通过查看方法返回类型),该对象实现了
可消耗的
接口。当前Expense方法是在myMethod返回的实际类中定义的。在本例中,如果您这样做,将调用谁的方法

new OtherClass.myMethod().expend();

是MyClass expend方法。

那么ResultSetTimepl{…}在数据库驱动程序的某个地方?那么ResultSetTimepl{…}在数据库驱动程序的某个地方?我有点理解,我突然意识到我从将SQL发送到DB的结果中得到了一个resultSet对象。所以我想知道ResultSet对象是在哪里创建的,接口是否能够确定方法的一些功能。这也解释了为什么通常存在实现接口的抽象类,而所有的方法体都是“空的”。@DaveM你没有得到
ResultSet
对象,你得到的是一个对象,它是实现
ResultSet
接口的类的实例。因此实际上我得到的是一个对象的“部分”。因此,我调用的对象可能有一个实现接口的成员,或者可能实现接口本身。如果被调用对象实现了接口(也可能实现了其他接口-这里语句对象可能实现元数据和结果集),当返回“实现接口的对象”时,我想我只能访问接口的那些方法,而不能访问被调用类中的任何其他方法,对吗。@DaveM Yes,没错。编译器只知道它正在处理某个类的实例,该类实现了
ResultSet
,因此它只能保证该接口中定义的方法存在于该类中。酷,因此JDBC驱动程序正在处理整个“结果集”对象创建工作,编译器会做自己的事情,确保我只能访问那些方法。有一天我真的必须看看JDBC驱动程序的代码!我给你+1表示耐心。由于您的评论使我更好地理解了编译器和驱动程序是如何协调工作的,因此我将给出您的正确答案。但我建议其他人也看看我问题中的链接。它的问题更好,答案也同样有用。我有点明白,我只是突然意识到,通过将SQL发送到DB的结果,我得到了一个resultSet对象。所以我想知道ResultSet对象是在哪里创建的,接口是否能够确定方法的一些功能。