这感觉就像一个愚蠢的问题,但它让我更加恼火,因为我不明白方法的声明在哪里。在我的代码中,我可以做一些事情(显然这是一个伪代码)
ResultSet rs = DB.getConnection.sendSQL(select * from [table])
我理解发送SQL会返回'结果集',虽然'ResultSet'只是一个接口,但返回的对象会实现该接口。
我的问题是返回的对象如何实现该接口?从我读到的界面只能定义一个方法签名,而不是一个完整的函数。
那么函数定义在哪里?显然不在ResultSet界面中!我是否正确理解这是数据库驱动程序的工作? (我想我可能刚刚回答了我自己的问题)。
我可以用一个功能齐全的方法编写一个接口吗?那么任何实现类是否会自动实现该方法,或者我只是通过调用'super'或其他东西来覆盖它?
我刚刚在SO上发现了另一个问题 How does abstract method of predefined interface like Connection, Statement etc. perform some task without having body? 这是一个完美的重复,但很多bette制定。一个很好的答案
答案 0 :(得分:1)
我的问题是返回的对象如何实现该接口?
class ResultSetImpl implements ResultSet { ... }
从我读的界面只能定义一个方法签名,而不是一个完整的函数。那么函数定义在哪里?显然不在ResultSet界面中!
在返回的对象中。在点;;)
这是非常基本Java。
答案 1 :(得分:1)
实现接口的类负责声明接口中的所有方法,并在适当的地方实现这些方法的内部逻辑。
接口基本上是在说“你必须为此提供功能,但我不在乎你是如何的。你只需要输入这些类型并提供这种类型的输出“。您可以在该课程中实现从输入到输出的方式。
答案 2 :(得分: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 myMethod
返回一个对象(我们不知道它是Class
只是通过查看实现Expendable
接口的方法返回类型。当前的Expend方法是在myMethod返回的实际类中定义的。在这种情况下,如果您执行
new OtherClass.myMethod().expend();
是MyClass的支出方法。