接口如何用作类?

时间:2013-03-24 00:33:58

标签: java interface resultset

也许这是一个非常愚蠢的问题。

我正在尝试使用Java学习连接到MySql数据库,我已经完成了。我的问题是:

ResultSet rs=statement.executeQuery(sql);

此代码工作正常。然后使用

rs.next();

我可以得到我想要的信息。

但是ResultSet是一个接口?它怎么有方法?

我在我的文件上有这个导入:

import java.sql.ResultSet;

谢谢。

5 个答案:

答案 0 :(得分:4)

ResultSetinterface,由statement.executeQuery()的返回类型实现。 ResultSet简单地说“对任何人来说,实施我的类型,他们必须提供至少这些操作/方法”。如果返回类型statement.executeQuery()想要实现ResultSet,那么由该类提供接口中所有方法的实现。

由于polymorphism,您可以使用implements ResultSet作为ResultSet对象本身的任何类。

你可以read more about Polymorphism here.

答案 1 :(得分:3)

ResultSet确实是interface - 它指定了合同。从Object返回的statement.executeQuery(sql);必须履行此合同。

所以statement.executeQuery(sql);会返回Object implements ResultSet interface的{​​{1}},因此必须为合同中定义的所有方法提供具体的实现。< / p>

一个简单的例子

public static interface MyInterface {

    void doStuff();
}

public static class MyInterfaceImplementer implements MyInterface {

    @Override
    public void doStuff() {
        System.out.println("Doing stuff");
    }
}

public static void main(String[] args) throws InterruptedException {
    final MyInterface mi = new MyInterfaceImplementer();
    mi.doStuff();
}

输出:

Doing stuff

因此MyInterface提供了一个实现对象必须具有public void doStuff()方法的契约。 MyInterfaceImplementor表示如果通过声明implements MyInterface来履行合同。

因此,我可以将MyInterface的引用分配给interface的具体实现者,实际调用的方法是MyInterfaceImplementer中的方法。

答案 2 :(得分:2)

这是面向对象编程的主要特征之一,它被称为继承。

这意味着任何子类都可以在声明母类的地方使用。

在您的情况下,方法statement.executeQuery(sql);会返回ResultSet。在这种情况下,语句正在创建一个实现ResultSet并返回它的子类。作为子类,所有母类方法都可以实现和调用。

答案 3 :(得分:2)

java.sql包中的接口由数据库供应商在为您编写JDBC驱动程序时实现。

加载JDBC驱动程序时会加载实现类。

这就是您的代码只需切换JDBC驱动程序JAR和更改连接参数即可更改数据库的方式。 (只要您坚持使用直接JDBC并且不使用任何特定于供应商的SQL。)

答案 4 :(得分:2)

接口有方法,在设计良好的系统中,您可以使用接口声明的方法。任何实现接口的类都必须定义接口声明的所有方法,并为它们提供实现。

因此,当您在接口ResultSet上使用方法时,您实际上正在使用在该接口的实现上声明的方法。