gpt4 book ai didi

Java 接口(interface) - 引用接口(interface)指向另一个接口(interface)的方法。该方法在哪里定义?

转载 作者:行者123 更新时间:2023-11-30 07:34:49 24 4
gpt4 key购买 nike

我了解接口(interface)的一般工作原理,但我对一件事感到困惑。开始学习JDBC,看不懂这个说法:

Connection conn = null; // set a reference pointing to nothing
Statement stmt = null;
PreparedStatement preparedStmt = null;
conn = DriverManager.getConnection('mysql/derby/other db', 'user', 'password');

//This is what I don't understand
stmt = conn.createStatement(); // Interface reference calling another interface's method
// Or this
preparedStmt = conn.preparedStatement("INSERT INTO db.table values (?, ?, ?, ?)";

我有一个Statement 接口(interface)引用指向另一个接口(interface)的方法Connection 接口(interface)。这个方法在哪里定义的?

最佳答案

虽然您可以拥有接口(interface)类型的变量(例如 ConnectionStatement,...),但运行时的实际对象需要具有某种特定的实现类型。

例如,DriverMananger.getConnection() 接管了寻找可以处理您提供的 JDBC URL 的 Connection 实现的工作。

让我们假设它是虚构的 MyDBConnection 类(当然实现了 Connection)。

现在您的 conn 变量包含对 MyDBConnection 的引用。

当您对该对象调用 createStatement() 时,实际上执行的是 MyDBConnection.createStatement()。该方法可能如下所示:

public Statement createStatement() {
return new MyDBStatement(this.someConnectionState);
}

在此之后,您的 stmt 变量将保存对 MyDBStatement 对象的引用。

记住:如果任何方法 promise 返回 A 类型的东西,它同样可以很好地返回 A 的子类型(即子类A 或实现 A 的类,如果 A 是一个接口(interface))。事实上,当 A 是一个接口(interface)时,它必须返回一个实现 A 的类。因为纯 A 对象不可能存在。

关于Java 接口(interface) - 引用接口(interface)指向另一个接口(interface)的方法。该方法在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4990030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com