Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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新手。我想知道什么时候应该使用基类的引用,什么时候应该创建一个新对象。我的意思是我们可以写作 List list = new ArrayList(); 什么时候 ArrayList list = new ArrayList(); 如何确定使用什么???使用 列表=新的ArrayList 始终学习使用接口编程。明天您可以在@Jigar中添加新的实现我的建议是使用这种方式进行类型安全 List< T > list = new ArrayList< T >();

我是Java新手。我想知道什么时候应该使用基类的引用,什么时候应该创建一个新对象。我的意思是我们可以写作

List list = new ArrayList();
什么时候

ArrayList list = new ArrayList();
如何确定使用什么???

使用

列表=新的ArrayList


始终学习使用接口编程。明天您可以在@Jigar中添加新的实现

我的建议是使用这种方式进行类型安全

List< T > list = new ArrayList< T >();

两者都可以使用,但前者更可取,因为使用对接口或超级类型列表的引用来调用实现的方法总是更好的。前者不依赖于实现,在实现ArrayList更改时无需更改代码,但后者要求在实现更改为ArrayList以外的任何内容时更改代码。

通常这并不重要。接口只定义了一组方法,您可以对对象调用这些方法:即对象实现接口。当一个接口可能有多个实现时,这才是关键。假设您有一个方法,该方法对实现车辆接口的对象执行某些操作:

public static double getSpeed(Vehicle vehicle) {
    return vehicle.getSpeed();
}
您希望传递接口,因为您不关心对象是汽车还是面包车或其他任何东西,并且您希望此方法适用于此接口的所有实现-即所有类型的车辆。它们都实现了Vehicle接口,因此您可以调用getSpeed方法。如果您这样做:

public static double getSpeed(Car car) {
    return car.getSpeed();
}

那么,您的方法将不适用于货车或卡车,即使它们都实现了车辆接口,因此都有.getSpeed方法。

Get和几袋咖啡豆。您可以解释为什么吗?我可以从List=new ArrayList中获得多大的灵活性???假设您只关心它是一个列表。如果你关心它也是随机访问呢?@maulik,明天假设你想使用新的LinkedList或任何其他实现,你只需要更改对象。我希望它能使你成功sense@maulik-请注意,在声明方法参数的类型时,这一点更为重要。大多数情况下,对于字段/局部变量,只需更改行的两部分而不是一部分,但是特定的方法参数可以阻止调用有用的方法,因为它们碰巧有LinkedList而不是ArrayList。根据方法的作用,可能它只应该坚持一个Iterable,例如,如果它只是对每个元素做了一些事情,以便甚至可以使用集合或用户创建的集合。@Jigar你能回答这个问题吗。现在,我也提到了错误,并使文章准确无误。