8

Java でインターフェイスをインスタンス化できますか? 簡単な答えは「いいえ」です。しかし、よくわからないことがあります。

ここで何が起きてるの?

SharedPreferencesはパブリック インターフェイスです。ただし、本で読んだように、このインターフェイスは使用しません。クラスを作成せず、SharedPreferences を実装しません。代わりに、この API を次のように使用します。

SharedPreferences pref = Context.getSharedPreferences("some value", 0);

では、このコードで実際に何が起こっているのでしょうか?

getSharedPreferences()SharedPreferencesは、使用して操作できるオブジェクトを作成しているようなものだと思います。

しかしSharedPreferences、インターフェイスです...そして、インターフェイスのオブジェクトを作成するのではなく、インターフェイスを実装する必要があると言われました。Javaでこれは何ですか??

Java API を見ると、Public Interface として定義されているクラスが表示されます。そのインターフェイスをいつ実装するか、またはこのタイプのオブジェクトをいつ作成するかをどのように知ることができますか?

4

5 に答える 5

7

Java でインターフェイスをインスタンス化することはできません。ただし、インターフェイスの型によって、インターフェイスを実装するオブジェクトを参照できます。

何が起こっているかというとgetSharedPreferences、そのインターフェイスを実装するオブジェクトを返します。返されるオブジェクトの型は重要ではありません。重要なのは、そのインターフェースのすべてのメソッドを実装しているため、SharedPreferences

于 2013-04-14T09:35:38.880 に答える
4

SharedPreferencesSharedPreferencesは参照ですが、オブジェクトを作成していません。むしろ、そのタイプのオブジェクトを作成しています。つまり、そのタイプの実装です。たとえば、実際には参照型インターフェイスの実装であるインスタンスの参照型としてインターフェイスを使用できる次の参照を見てください。http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html

于 2013-04-14T09:32:01.897 に答える
3
 SharedPreferences pref = Context.getSharedPreferences("some value", 0);

このコードでは、オブジェクトのタイプは SharedPreferences ですが、インスタンスは SharedPreferences のインターフェイスを実装するクラスです。これは OOP の基本概念です。

于 2013-04-14T09:29:43.417 に答える
2

ただし、本で読んだように、このインターフェイスは使用しません。クラスを作成せず、SharedPreferences を実装しません。

このインターフェイスを実装するクラスを作成する必要はありません。他のユーザーが既に作成しているためです。クラス名さえ知らなくても、インターフェースを介してこのクラスを使用します。それがインターフェースの目的です。

于 2013-04-14T09:42:24.960 に答える
0

SharedPreferencesに実装されているインターフェイスContextです。ここに表示されているのは、インターフェイスに対する抽象化の例です。変数をインターフェイスとして定義することで、コードの変更が容易になります (現在のクラスは、クラスに直接リンクするのではなくpref、クラスと疎結合されます)。Context

によって返されるオブジェクトContext.getSharedPreferencesの型は になりますSharedPreferences

于 2013-04-14T09:30:36.647 に答える