Выходной поток является абстрактным классом, поэтому мы не можем его создать. Почему тогда для класса Outputstream предусмотрен конструктор по умолчанию?

вот ссылка для документации API абстрактного класса Outputstream. Вы найдете конструктор по умолчанию

http://docs.oracle.com/javase/7/docs/api/java/io/OutputStream.html#OutputStream%28%29

Ответ 1

Класс должен иметь хотя бы один конструктор, потому что все классы Java имеют конструкторы. Кроме того, подклассы должны будут привязаться к ней, поэтому она должна быть как минимум protected доступностью. Конструктору ничего не нужно делать, поэтому авторы решили не указывать явное. Теперь, из JLS 8.8.9:

Конструктор по умолчанию имеет такую ​​же доступность, как класс

Вот почему он public. Он мог быть явно представлен как:

protected OutputStream() {
}

... или еще лучше, JLS мог бы сделать это так, чтобы публичные конструкторы по умолчанию для абстрактного класса были неявно защищены. Тем не менее, это не вредно для него, чтобы быть публичным.

Ответ 2

Конструктор по умолчанию всегда присутствует в каждом классе java, если нет другого конструктора. Это имеет смысл, так как вам нужно каким-то образом создать экземпляр класса. Для абстрактных классов все еще должен быть конструктор, который может быть вызван конструкторами подклассов. Даже если вы явно не пишете оператор super() как первый оператор конструктора, он неявно добавляется компилятором и выполняется во время выполнения.

Ответ 3

Каждый класс в Java должен иметь конструктор. То, что вы говорите, я понимаю, это то, что когда я не могу создать свой объект, что использовать конструктор?? Но его правило и любой подкласс при создании вызывает конструктор базового класса, как цепной процесс. Он мог быть защищен

Ответ 4

Я думаю, что этот вопрос очень важен. Конструктор без аргументов неявно доступен, если конструктор явно не определен.

Поскольку абстрактный класс OutputStream не имеет других конструкторов, конструктор no-arg не нужен.