这是我的代码:
import java.io.*;
public class WrappedWriter extends PrintWriter {
public WrappedWriter(OutputStream o){
super(o);
}
public WrappedWriter(File f) throws FileNotFoundException{
super(f);
}
public WrappedWriter(String s) throws FileNotFoundException{
super(s);
}
}
如您所见,此类正在扩展PrintWriter。在WrappedWriter类中,我继续创建一个字符串,我可以打印到终端或写入文件。我被告知,为了将它写入文件,我必须在这里插入第二和第三个构造函数。我已经放了super()来调用父类,但我试图找出如何编写String我最终通过在构造函数中键入代码来获取文件f。谁能指出我正确的方向?以下是我在交互模式中输入某些输入时应该发生的事情。
WrappedWriter out = new WrappedWriter(System.out)
out = new WrappedWriter("gettysburg.txt");
out.println("Four score and seven years ago our fathers brought forth, upon this continent, a new nation, conceived in Liberty, and dedicated to the proposition that all men are created equal.")
out.close();
在输入out.close后,它应该将字符串写入文件gettysburg.txt,但它没有这样做。
答案 0 :(得分:0)
我被告知为了写入文件,我必须在第二和第三个构造函数中插入一些东西[s]
你被误导了。这两个构造函数都会导致writer写入文件。请参阅Javadoc for PrintWriter。
答案 1 :(得分:0)
你无法真正“覆盖”构造函数,因为这样做会打开允许某些“超类实例”跳过初始化的可能性。
您可以通过编写具有相同参数列表的子类构造函数来“链接”构造函数。如果这样做,编译器将添加(如果您忘记显式添加)一个super(...)
调用,该调用将参数与子类构造函数块的第一行相匹配。
至于你关于close()
方法的问题......好吧,那不是构造函数,你可以覆盖close方法,甚至可以不关闭文件。不建议这样做,因为它会违反Liskov替换原则,这会产生很多问题,但可以完成。