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

时间:2013-08-27 05:47:37

标签: java api constructor abstract protected

这个问题是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
        // ...
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

答案 1 :(得分:2)

是在第一段代码中您可以使用

有一个主要区别
FilterInputStream fis =new FilterInputStream(in);

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

FilterInputStream fis =new FilterInputStream(in);

因为抽象类没有任何对象。 它只是遗传的和它的孩子可以被实例化。