Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过新运算符或某些接口进行对象分配_Java - Fatal编程技术网

Java 通过新运算符或某些接口进行对象分配

Java 通过新运算符或某些接口进行对象分配,java,Java,我正在浏览一段Java代码,我看到对象是使用一些接口分配的,这个接口包含一些使用new操作符分配对象的方法。我无法理解他们为什么使用接口而不是使用new操作符直接分配对象。e、 g: Animal animal = new Animal(); 或 Animal animal = interface.allocateAnimal() 这里的interface是一个接口,它有一个方法allocateAnimal,除了 新动物() 所以,最终我们做的是同样的事情,但方式不同,那么我们从中得到了什么

我正在浏览一段Java代码,我看到对象是使用一些接口分配的,这个接口包含一些使用
new
操作符分配对象的方法。我无法理解他们为什么使用接口而不是使用
new
操作符直接分配对象。e、 g:

Animal animal = new Animal();

Animal animal = interface.allocateAnimal()
这里的
interface
是一个接口,它有一个方法
allocateAnimal
,除了
新动物()

所以,最终我们做的是同样的事情,但方式不同,那么我们从中得到了什么呢


编辑1:实际上接口是在其他地方实现的。所以接口不包含任何实现代码,它只包含方法。

首先,接口不分配任何内容。他们只是在订立合同

你在那里看到的就是这个。有人决定实现该接口,具体实现的方法是创建一个
Animal
对象。您可以查看该模式的链接,在那里您将找到有关factory方法的详细说明

这里有一个关于使用工厂模式的原因的例子,它可能值得一看。关键是:

…使用工厂允许消费者创建新的 对象,而不必知道它们是如何创建的,或者 他们的依赖性是什么-他们只需要提供信息 他们真的想要


还有一点:编写您正在阅读的代码的人可能会试图引用某个东西的编程接口,而不是java中的技术
接口
关键字。这意味着。

我认为接口中实际上没有任何代码,因为接口不能有实现

但是,您希望使用interface.allocateAnimal()的原因是,有时您不知道要从哪种动物获得新的。 它可能是马、狗、猫等


只有在运行时你才知道。因此,接口对象在运行时是一个实现,例如Cat,Cat对象将有一个
新的Cat()
,它将返回。

这是一个称为工厂方法的设计模式

注意:虽然一个类有一个API(应用程序编程接口),“接口”本身有一个特殊的含义/在Java中是一个关键词。由于您的示例具有该方法的实现,因此它不能是接口

编辑

如果它真的是Java接口,那么您可能会看到抽象工厂设计模式的实现:

那么
Cat
会分配一个新的
Cat
并返回它吗?没什么意义。读@AdamAroldanswer@icepack对我觉得有道理:)