我的教科书在文件和流部分有一个让我感到困惑的例子。
BufferedReader inFile = new BufferedReader (new FileReader ("data.txt"));
我的想法是,我们正在创建一个类型为BufferedReader
的对象,并使用另一个类构造函数FileReader
构造它们,然后将该对象"放置"到BufferedReader
构造函数中。
为什么我们使用两个"新"关键字实例化对象,发生了什么?
这属于多态性还是遗传性?
也许这个等效的代码会更有意义:
FileReader fileReader = new FileReader("data.txt");
BufferedReader inFile = new BufferedReader(fileReader);
所有这些操作都是构造一个用作BufferedReader
构造函数参数的FileReader
对象。这是一个既不多态也不继承的示例,这只是将表达式嵌套在其他表达式中。
大多数流类都可以链接在一起。new 运算符使用后面的构造函数返回 next 类型的实例。因此,FileReader
使用将要读取的文件进行初始化,并将生成的对象传递给BufferedReader
以便缓冲从文件中读取的内容,以便在实际读取期间进行高效 I/O。