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

这可能是一个愚蠢的问题,但我想知道后台操作的区别。

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

上述两行代码之间有什么区别,在什么场景中使用它们。


答案 1

FileInputStream扩展:它是专为读取文件而设计的输入流的专用版本。InputStream

根据输入流的用法,有几种实现。

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


答案 2

没有真正的区别。 扩展 ,因此您可以将对象指定为对象。最后,它是相同的对象,因此将发生相同的操作。FileInputStreamInputStreamInputStreamFileInputStream

此行为称为多态性,在面向对象编程中非常重要。

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

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