您可以在Java中实例化接口
我知道快速回答是“不”。 但是有一点我不太了解。
这里发生了什么:
SharedPreferences是一个公共接口:
http://developer.android.com/reference/android/content/SharedPreferences.html
但是我们没有像书中所读到的那样使用这个界面,我们不创建一个类并实现SharedPreferences。 \
相反,我们使用这样的API:
SharedPreferences pref = Context.getSharedPreferences("some value", 0);
http://developer.android.com/reference/android/content/Context.html#getSharedPreferences(java.lang.String,%20int)
那么这段代码到底发生了什么?
我认为它像getSharedPreferences()一样创建了一个SharedPreferences对象,然后我们可以使用和操作它。
但SharedPreferences是一个接口......我被告知你必须实现接口而不是创建它们的对象。
Java中的内容是什么?
非常感谢所有指针
(我还在努力学习)
跟进问题。
当我查看Java API时,我看到一个定义为Public Interface的类。 我如何知道何时实现该接口或何时从中创建此类对象?
答案 0 :(得分:7)
您永远无法在java中实例化接口。但是,您可以通过接口类型引用实现接口的对象。
所以发生的事情是getSharedPreferences
返回一个实现该接口的对象。返回对象的类型并不重要。重要的是它实现了该接口的所有方法,因此可以用作SharedPreferences
答案 1 :(得分:3)
SharedPreferences pref = Context.getSharedPreferences("some value", 0);
在此代码中,对象的类型是SharedPreferences,但实例是实现SharedPreferences接口的类 这是OOP的基本概念
答案 2 :(得分:3)
SharedPreferences
是一个参考,但您没有创建SharedPreferences
对象。相反,您正在创建一个该类型的对象;即,该类型的实现。例如,查看以下参考,您可以将Interface用作实例的引用类型,该实例实际上是引用类型接口的实现。 http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html
答案 3 :(得分:2)
但是我们没有使用这个界面,因为我在书中已经读过,我们不创建一个类并实现SharedPreferences。
您不创建实现此接口的类,因为有人已经为您创建了一个。您通过其界面使用此类,甚至不知道类名。 这就是的接口。
答案 4 :(得分:0)
SharedPreferences
是Context
中实现的界面。你在这里看到的是一个抽象接口的例子:通过将你的pref
变量定义为一个接口,你可以更容易地更改代码(你现在的类现在松散地与Context
类相结合而不是放置直接链接到它。)
Context.getSharedPreferences
返回的对象的类型为SharedPreferences
。