Java вопрос. Реализация ввода данных

Помогите разобраться



1). InputStream inputStream = System.in;

2). Reader inputStreamReader = new InputStreamReader(inputStream);

3). BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


4). String name = bufferedReader.readLine(); 

5). String sAge = bufferedReader.readLine(); 

6). int nAge = Integer.parseInt(sAge); 



Вопрос только по первой строке


1. InputStream это абстрактный класс. Создать объект его типа невозможно. По сути мы создаём ссылку inputStream на класс System и метод in? Т.е. System.in будет работать с классом InputStream в паре?

2
Автор поста оценил этот комментарий

Переменная System.in имеет тип InputStream

Но, как вы отметили, InputStream абстрактный, то есть, нельзя создать переменную этого класса. И да, на самом деле System.in ссылается на объект класса FileInputStream

Представьте такой код где-то в недрах пакета java.io:


class System

{

public static InputStream in;


{ // инициализация

FileInputStream stdinFileHandle = new FileInputStream(0);

System.in = stdinFileHandle;       // System.in ссылается на этот объект, но сам объект не копируется

}


То есть, реально System.in ссылается на объект класса FileInputStream, но вам об этом не следует знать, поэтому наружу (вам) отдается объект типа InputStream. И дальше вы работаете с этим FileInputStream так, как будто это InputStream


То есть да, класс InputStream абстрактный, но ведь и его экземпляра не было создано. Все по правилам.


Когда вы пишете

InputStream inputStream = System.in

это вы создаете просто ссылку на тот же объект, что и System.in. Сам этот объект как был, так и остается в единственном экземпляре.

раскрыть ветку
2
Автор поста оценил этот комментарий

нашел место... иди на форум javatalks.ru

1
Автор поста оценил этот комментарий

Блин, чувак, есть же stackoverflow, cyberforum и десятки других форумов.

1
Автор поста оценил этот комментарий

дружище, у тебя там пост был с названием "Учусь Java самостоятельно", а по итогу уже 5-ый пост с вопросом.


иди учи, что такое свойство, а что такое метод

раскрыть ветку