【问题标题】:Can you instantiate an Interface in Java [duplicate]你能用Java实例化一个接口吗[重复]
【发布时间】:2013-04-14 09:26:16
【问题描述】:

你能用 Java 实例化一个接口吗?我知道快速回答是“不”。但是有些东西我不太理解。

这里发生了什么?

SharedPreferences 是一个公共接口。然而,我们没有像我在书中读到的那样使用这个接口,我们没有创建一个类并实现 SharedPreferences。相反,我们像这样使用这个 API:

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

那么这段代码到底发生了什么?

我认为这就像 getSharedPreferences() 正在创建一个 SharedPreferences 对象,然后我们可以使用和操作它。

但是SharedPreferences 是一个接口......有人告诉我你必须实现接口而不是创建它们的对象。这在 Java 中是什么??

当我查看 Java API 时,我看到一个定义为公共接口的类。我如何知道何时实现该接口或何时从中创建此类对象?

【问题讨论】:

    标签: java class interface instance


    【解决方案1】:

    你永远不能在 java 中实例化一个接口。但是,您可以通过接口的类型来引用实现接口的对象。

    所以发生的事情是getSharedPreferences 返回一个实现该接口的对象。返回对象的类型并不重要。重要的是它实现了该接口的所有方法,因此它可以用作SharedPreferences

    【讨论】:

      【解决方案2】:

      SharedPreferences 是一个引用,但您没有创建 SharedPreferences 对象。相反,您正在创建一个属于该类型的对象;即,该类型的实现。例如,查看以下参考资料,您可以在其中使用接口作为实例的参考类型,该实例实际上是参考类型接口的实现。 http://docs.oracle.com/javase/tutorial/java/IandI/interfaceAsType.html

      【讨论】:

        【解决方案3】:
         SharedPreferences pref = Context.getSharedPreferences("some value", 0);
        

        在此代码中,您的对象类型是 SharedPreferences 但实例是实现 SharedPreferences 接口的类 这是OOP的一个基本概念

        【讨论】:

          【解决方案4】:

          但是我们不使用这个接口,正如我在书中读到的那样,我们不创建类并实现 SharedPreferences。

          不要创建一个实现这个接口的类,因为有人已经为你创建了一个。您通过它的接口使用这个类,甚至不知道类名。 这就是接口的用途

          【讨论】:

            【解决方案5】:

            SharedPreferences 是在Context 中实现的接口。您在这里看到的是一个对接口进行抽象的示例:通过将pref 变量定义为接口,您可以更轻松地更改代码(您当前的类现在与Context 类松散耦合,而不是直接链接到它)。

            Context.getSharedPreferences 返回的对象将是SharedPreferences 类型。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2014-07-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-10-02
              • 1970-01-01
              • 2019-01-03
              相关资源
              最近更新 更多