代码之家  ›  专栏  ›  技术社区  ›  Michael Bishara

通过链接构造函数实例化对象

  •  0
  • Michael Bishara  · 技术社区  · 6 年前

    我的教科书在文件和流部分有一个让我困惑的例子。

    BufferedReader inFile = new BufferedReader (new FileReader ("data.txt"));
    

    我的想法是,我们正在创造一种类型的物体 BufferedReader 并用另一个类构造函数构造它们 FileReader 然后把这个物体放进 缓冲区读取 建造师。

    为什么我们要用两个“新”关键字实例化对象,以及发生了什么?

    这属于多态性还是继承性?

    2 回复  |  直到 6 年前
        1
  •  1
  •   k_ssb    6 年前

    也许这个等价的代码会更有意义:

    FileReader fileReader = new FileReader("data.txt");
    BufferedReader inFile = new BufferedReader(fileReader);
    

    这一切所做的只是构建一个 FileReader 对象,该对象用作 BufferedReader 建造师。这是一个既不是多态性也不是继承性的例子,这只是将表达式嵌套在其他表达式中。

        2
  •  1
  •   particleman    6 年前

    大多数流类可以链接在一起。新操作符使用后面的构造函数返回下面类型的实例。所以 FileReader 使用将被读取的文件初始化,并将结果对象传递给 BufferedReader 这样,在实际读取期间,从文件中读取的数据将被缓冲,以实现高效的I/O。