0

これはばかげた質問のように感じますが、メソッドがどこで宣言されているのか理解できないので、私はイライラします。私のコードでは、次のようなことができます(明らかに、これは少し疑似コードです)

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

SQL を送信すると「結果セット」が返されることを理解しています。「ResultSet」は単なるインターフェイスですが、返されたオブジェクトはそのインターフェイスを実装しています。

私の質問は、返されたオブジェクトがそのインターフェイスをどのように実装するかです。私が読んだことから、インターフェースは完全な関数ではなく、メソッドシグネチャのみを定義できます。

では、関数はどこに定義されているのでしょうか? 明らかに ResultSet インターフェースにはありません! これはデータベース ドライバーの仕事であるという理解で正しいでしょうか? (私は自分の質問に答えたばかりかもしれません)。

完全に機能するメソッドを使用してインターフェイスを作成できますか? 実装クラスはそのメソッドを自動的に実装しますか、それとも「スーパー」などの呼び出しで上書きするだけですか?

SO でこの他の質問を見つけました 。接続、ステートメントなどの事前定義されたインターフェイスの抽象メソッドは、本体なしでどのようにタスクを実行しますか? これは完全な複製ですが、よりよく定式化されています。そして素晴らしい答え

4

3 に答える 3

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 の expend メソッドです。

于 2012-09-05T08:56:09.570 に答える
1

私の質問は、返されたオブジェクトがそのインターフェイスをどのように実装するかです。

class ResultSetImpl implements ResultSet { ... }

私が読んだことから、インターフェースは完全な関数ではなく、メソッドシグネチャのみを定義できます。では、関数はどこに定義されているのでしょうか? 明らかに ResultSet インターフェイスにはありません!

返されたオブジェクト。ドットで;-)

これは非常に基本的な Java です。

于 2012-09-05T08:44:25.023 に答える
1

インターフェイスを実装するクラスは、インターフェイス内のすべてのメソッドを宣言し、必要に応じてそれらのメソッドの内部ロジックを実装する責任があります。

インターフェイスは本質的に、「これには機能を提供する必要がありますが、それをどのように行うかは気にしません。これらのタイプの入力を取得し、このタイプの出力を提供するだけでよい」と言っています。クラスは、入力から出力への取得方法を実装する場所です。

于 2012-09-05T08:48:01.007 に答える