具体类中的受保护构造函数与抽象类中的公共构造函数

Jin*_*won 5 java api constructor protected abstract

此问题是FilterInputStream / FilterOutputStream空源的以下问题

这个问题可能与受保护vs公共构造函数的抽象类重复吗?有区别吗?(C#)

我发现FilterInputStream是这样设计的。

public class FilterInputStream extends InputStream { // concrete

    protected FilterInputStream(InputStream in) { // protected
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果代码是

public abstract class FilterInputStream extends InputStream { // abstract

    public FilterInputStream(InputStream in) { // public
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Uwe*_*nus 3

主要区别在于,第一个类可以实例化,而第二个类不能实例化,因为它是抽象的。

受保护的构造函数可以由子类或同一包中的类调用。

因此,包中的任何类都java.io可以调用new FilterInputStream(),而其他包中的类则不能执行此操作。

另外问题是对于第一种情况,类中是否可能还有其他构造函数?

因此,从继承来看,除了使用同一包中的类之外,没有真正的区别。