【发布时间】:2009-05-12 13:36:13
【问题描述】:
令我惊讶的是,以下代码打印出两次“关闭”。通过调试器运行,似乎MyPrintStream.close() 调用了super.close(),最终又调用了MyPrintStream.close()。
import java.io.*;
public class PrintTest
{
static class MyPrintStream extends PrintStream
{
MyPrintStream(OutputStream os)
{
super(os);
}
@Override
public void close()
{
System.out.println("Close");
super.close();
}
}
public static void main(String[] args) throws IOException
{
PrintStream ps = new MyPrintStream(new FileOutputStream(File.createTempFile("temp", "file")));
ps.println("Hello");
ps.close();
}
}
为什么会这样?我不应该扩展 PrintStream 吗?
【问题讨论】:
-
这是一个调试器的优点。在 close 方法中放置一个断点,您应该可以看到它被调用的原因。
标签: java inheritance printstream