在创建FileInputStream对象时使用InputStream而不是FileInputStream有什么区别

Mat*_*mar 17 java inputstream file fileinputstream java-io

这可能是一个愚蠢的,但我想知道背景操作的差异.

  1. InputStream is = new FileInputStream(filepath);
  2. FileInputStream is = new FileInputStream(filepath);

上面两行代码之间的区别是什么,以及它们使用的场景.

Jea*_*art 22

FileInputStreamextends InputStream:它是一个专门用于读取文件的InputStream版本.

根据它的使用,有几种InputStream实现.

通常,最好使用代码中所需的最高类型.因此,如果您的代码需要InputStream从a中读取数据,而不是从a中读取数据FileInputStream,则应该使用InputStream.然而,如果您确实需要保持对象的信息FileInputStream而不仅仅是一个InputStream,那么您应该保留FileInputStream类型.


Wil*_*son 12

没有真正的区别. FileInputStream扩展InputStream,因此您可以将InputStream对象指定为FileInputStream对象.最后,它是同一个对象,因此会发生相同的操作.

这种行为称为多态,在面向对象编程中非常重要.

您的第一行代码可能比第二行更合适,因为它不会将您锁定为FileInputStream.

这是面向对象编程的优势之一.不指定类型允许您更改以后使用的流类型.如果您确定只需要FileInputStream这里,请使用第二行代码.