2016-09-28 4 views
0

こんにちは、私は、Javaのインターフェイスに関する情報を発見し、それは我々がそれアンドロイド - のJava - 私たちはintefaceををインスタンス化カント - いただきましカーソルを、その後

のインスタンスを作成カントと言うが、私は、現在のSQLiteを実装していると私はこれを発見しました。

Cursor res = db.rawQuery("SELECT * FROM " + TABLE_NAME,null); 

一方:

public interface Cursor extends Closeableので、私は、インターフェイスのインスタンスを作成することができていますか?

+3

'' rawQuery''メソッドは、 '' Cursor''インタフェースを実装するクラスのインスタンスを返します。そのクラスはあなたのsqliteライブラリの一番の可能性が高いです。あなたは、そのインターフェイスを実装する独自のクラスを作成できますが、その目的は何ですか? – f1sh

+0

ああ、確かに私はそれを得た –

答えて

4

いいえあなたはそうしてインスタンスを作成していません。インスタンスを作成するには、newキーワードを使用する必要があります(または、反射を使用しますが、質問の範囲外です)。内のどこかdb.rawQuery彼らはクラスのインスタンスを作成していますimplementsカーソル。インターフェイスを実装するには、宣言したすべてのメソッドを実装する必要があります(図参照)。つまり、そのオブジェクトを「Cursorクラス」のインスタンスとして扱い、Cursorが必要な人に返します。彼らはそのインタフェースのインスタンスを直接作成することはありません。

1

多態性を許可する言語(Javaなど)では、 "="より前の左側に表示されるタイプは静的タイプと呼ばれ、右側は動的タイプと呼ばれます。

静的型では、使用しているオブジェクトがカーソル型であることを指定できます。これはあなたがそれで実行することを許可されている操作をロックします。オブジェクトの動的型は、互換性を持たせるためにインタフェースの型を実装するクラスでなければならない実際の型付けです。

関連する問題