以下代码引自:http://examples.javacodegeeks.com/core-java/io/fileoutputstream/java-io-fileoutputstream-example/
虽然OutputStream是一个抽象方法,但在下面的代码中,OutputStream对象用于写入文件。
Files.newOutputStream(filepath))返回OutputStream。然后,out的类型是OutputStream,out out引用OutputStream。
当OutputStream是一个抽象类时,这怎么可能呢?
base.html
答案 0 :(得分:4)
仅仅因为声明的类型是OutputStream
,这并不意味着实现不会创建具体子类的实例OutputStream
。你一直看到这个接口。例如:
public List<String> getList() {
return new ArrayList<String>();
}
基本上你需要区分暴露的API(使用抽象类)和实现(可以选择使用它想要的任何子类)。
所以Files.newOutputStream
可以实现为:
public static OutputStream newOutputStream(Path path)
throws IOException {
return new FileOutputStream(path.toFile());
}