当前位置: 首页 > 面试题库 >

实例化接口

丰智
2023-03-14
问题内容

扩展初始化接口时提出的问题?),我们在实例化接口的同时用实现的类对其进行初始化。

我的问题是,为什么首先要使用Interface实例化它?为什么我不能直接用实现的类实例化它?例如。:

Doc mydoc = new SimpleDoc();

Doc是接口,而SimpleDoc正在实现它。SimpleDoc有什么问题?mydoc = new SimpleDoc(); 哪里会失败?


问题答案:

通常,最好的方法是依赖系统中的抽象类型(接口或抽象类)。

在您的示例中,您确实可以编写:

SimpleDoc mydoc = new SimpleDoc()

但是,问题在于所使用的代码mydoc将取决于具体类型SimpleDoc。但这本身不一定是问题,但是,假设您创建了一个新的实现Doc,例如ComplexDoc

您可以将声明更改为:

ComplexDoc mydoc = new ComplexDoc();

现在,您传递mydoc给的所有place方法也都必须更改。

但是,如果您Doc最初使用过,则只需要进行一次更改:

Doc mydoc = ComplexDoc();

当您使用Collections API时,这非常有用,在这种情况下,通常会转换另一个实现,或者在测试用例中使用Mocking。



 类似资料:
  • 我在跟随一位导游http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/对于GCM。 目前,我被困在接收通知的部分。有时,当我运行代码时,它会因以下错误而崩溃: 7.517:E/AndroidRuntime(8601):致命异常:mai

  • 假设你有一个绘制了很多模型的场景,而大部分的模型包含的是同一组顶点数据,只不过进行的是不同的世界空间变换。想象一个充满草的场景:每根草都是一个包含几个三角形的小模型。你可能会需要绘制很多根草,最终在每帧中你可能会需要渲染上千或者上万根草。因为每一根草仅仅是由几个三角形构成,渲染几乎是瞬间完成的,但上千个渲染函数调用却会极大地影响性能。 如果我们需要渲染大量物体时,代码看起来会像这样: for(un

  • 问题内容: 当用Java实例化一个对象时,真正进入内存的是什么? 是否包含父级构造函数的副本? 投射时,为什么隐藏数据成员的行为与重写方法不同? 我理解为使您正确使用这些东西而通常给出的抽象解释,但是JVM如何真正做到这一点。 问题答案: 实例化对象时,实际上仅“静态”数据以及创建该对象的对象类型的引用被“创建”。 没有方法被复制过。 创建它的类的“引用”实际上是一个指针调度表。该类可用的每个方法

  • 我有一个基于Spring的Java应用程序,其中许多类使用以下自动生成的接口... 现在,接口只有一个实现,如下所示: 应用程序的工作原理与预期一致。Spring是快乐的。大家都很高兴。好吧,不是每个人。。。 所以,我想添加另一个具体的实现... 我们需要的是IOperatingSystemManager根据属性文件设置有条件地自动连接。(比如说..os=windows..基本上是一个任意字符串,

  • 我已经将Android应用程序上传到playstore。在第一次下载时,它会崩溃,但在那之后,它工作正常。它将错误显示为无法实例化接收器com。谷歌。Android应用程序。分析。由java引起的AnalyticsReceiver。lang.ClassNotFoundException:未找到类“com.google.android.apps.analytics.analytics.Analyti

  • 问题内容: 我已经找到了实例化Singleton的三种方法,但是我怀疑其中是否有最好的方法。我在多线程环境中使用它们,并且更喜欢延迟实例化。 范例1: 范例2: 范例3: 我正在使用ATM的项目到处都使用Sample 2,但我还是更喜欢Sample 3。还有Enum版本,但是我不明白。 这里的问题是- 在什么情况下我应该/不应该使用这些变体中的任何一个?我并不是在寻找冗长的解释(对此还有很多其他话