5

这个问题是FilterInputStream/FilterOutputStream的null source的以下问题

这个问题可能与抽象类的受保护与公共构造函数重复?有区别吗?(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
        // ...
    }
}
4

2 回答 2

3

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

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

因此,包中的任何类java.io都可以调用new FilterInputStream(),而其他包中的类不能这样做。

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

因此,从继承来看,没有真正的区别,而是使用同一个包中的类。

于 2013-08-27T05:55:59.120 回答
2

是的,您可以在第一个代码中使用一个主要区别

FilterInputStream fis =new FilterInputStream(in);

但在第二个代码中你不能使用

FilterInputStream fis =new FilterInputStream(in);

因为抽象类不能有任何对象。它只能被继承并且它的孩子可以被实例化。

于 2013-08-27T05:57:43.270 回答