5

この質問は、FilterInputStream/FilterOutputStream の null ソースの次の質問です。

この質問は、抽象クラスの保護されたコンストラクターとパブリックコンストラクターで重複している可能性がありますか? 違いはありますか?(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

主な違いは、最初のクラスはインスタンス化できるのに対し、2 番目のクラスは抽象的であるためインスタンス化できないことです。

保護されたコンストラクターは、サブクラスまたは同じパッケージ内のクラスによって呼び出すことができます。

したがって、パッケージ内のどのクラスjava.ioも呼び出すことができnew FilterInputStream()ますが、他のパッケージ内のクラスはこれを行うことができません。

また、最初のケースのクラスに他のコンストラクターが存在する可能性があるかどうかも問題です。

したがって、継承による実際の違いはありませんが、同じパッケージのクラスを使用するためです。

于 2013-08-27T05:55:59.120 に答える
2

はい、最初のコードで使用できる主な違いが1つあります

FilterInputStream fis =new FilterInputStream(in);

しかし、2番目のコードでは使用できません

FilterInputStream fis =new FilterInputStream(in);

抽象クラスはオブジェクトを持つことができなかったからです。継承されるだけで、その子はインスタンス化できます。

于 2013-08-27T05:57:43.270 に答える