这个问题是null source for FilterInputStream/FilterOutputStream的以下问题
这个问题可能是protected vs public constructor for abstract class? Is there a difference?(C#)的重复项
我发现FilterInputStream是这样设计的。
public class FilterInputStream extends InputStream { // concrete
protected FilterInputStream(InputStream in) { // protected
// ...
}
}
我的问题是,如果代码是
public abstract class FilterInputStream extends InputStream { // abstract
public FilterInputStream(InputStream in) { // public
// ...
}
}
最佳答案
主要区别在于可以实例化第一类,而不能实例化第二类,因为它是抽象的。
protected 构造函数可以由子类或同一包中的类调用。
因此,软件包java.io
中的任何类都可以调用new FilterInputStream()
,而其他软件包中的类则不能这样做。
同样的问题是,在第一种情况下,类中是否可能还有其他构造函数?
因此,从继承那里并没有真正的区别,只是使用同一包中的类。