这个问题是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(),而其他软件包中的类则不能这样做。

同样的问题是,在第一种情况下,类中是否可能还有其他构造函数?

因此,从继承那里并没有真正的区别,只是使用同一包中的类。

09-06 12:27