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 в паре?
Переменная 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 абстрактный, но ведь и его экземпляра не было создано. Все по правилам.
Когда вы пишете
это вы создаете просто ссылку на тот же объект, что и System.in. Сам этот объект как был, так и остается в единственном экземпляре.
нашел место... иди на форум javatalks.ru
Блин, чувак, есть же stackoverflow, cyberforum и десятки других форумов.
дружище, у тебя там пост был с названием "Учусь Java самостоятельно", а по итогу уже 5-ый пост с вопросом.
иди учи, что такое свойство, а что такое метод