你能用Java实例化一个接口吗?

时间:2013-04-14 09:26:17

标签: java interface

您可以在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的类。 我如何知道何时实现该接口或何时从中创建此类对象?

5 个答案:

答案 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)

SharedPreferencesContext中实现的界面。你在这里看到的是一个抽象接口的例子:通过将你的pref变量定义为一个接口,你可以更容易地更改代码(你现在的类现在松散地与Context类相结合而不是放置直接链接到它。)

Context.getSharedPreferences返回的对象的类型为SharedPreferences