JavaLoc
@JavaLoc
Начинающий Девелопер

Поток System.in — экземпляр абстрактного класса. Как такое возможно?

Читаю Шилдта и возник такой вопрос: он обьясняет, что поток стандартного вывода System.in это экземпляр класса InputStream, но ведь InputStream - абстрактный класс и соответственно создать обьект такого типа не представляется возможным. Что я упустил?
  • Вопрос задан
  • 484 просмотра
Пригласить эксперта
Ответы на вопрос 3
@FoxInSox
Во-первых создать экземпляр абстрактного класса можно, необходимо только реализовать абстрактные методы:
InputStream is = new InputStream() {
	@Override public int read() throws IOException {
		return 123;
	}
};
System.out.println(is.read());//123

Во-вторых у InputStream'а целая гора наследников. Я не знаю как там формулировал Шилдт, но он наверняка не имел ввиду что System.in это именно экземпляр InputStream'а.

В-третьих вы сами можете(должны) это проверить:
System.out.println(System.in);//java.io.BufferedInputStream@5577140b

Т.е. System.in конкретно на моей машине в моей jvm это экземпляр BufferedInputStream.

PS больше пишите код. На одну прочитанную страницу книги должна быть написана одна страница кода.
Ответ написан
Комментировать
@onepavel
Консультация и разработка мобильных приложений
Наследование упустил и приведение ссылок
Не парься сейчас об этом, это будет дальше в книге .
Ответ написан
timych
@timych
В таких случаях сразу открывайте доки.
docs.oracle.com/javase/7/docs/api/java/io/InputStr...
И смотрите эту строчку:
Direct Known Subclasses:
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream


Также, как верно заметил FoxInSox, класс может быть легко инстанцирован.
Либо иметь реализации в каких-то сторонних библиотеках.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы