System
- это, как вы знаете, класс, а out
- статическая переменная класса System
типа PrintStream
т.е. внутри класса System
, out
объявлено как:
public static final PrintStream out;
Это также означает, что out
является экземпляром класса PrintStream
, поэтому он может обращаться к методам, определенным в классе PrintStream
.
Итак, когда мы обращаемся к статической переменной out
вне класса System
, мы пишем
System.out
и для доступа к таким методам, как print
или println
класса PrintStream
, мы пишем
System.out.print()
как System.out
(или out
) - не что иное, как переменная, указывающая на объект класса PrintStream
, как сказано выше.
Мы могли бы также написать
Printstream john;
john = new Printstream();
john = system.out; //now both variable point to same object
john.println(); //instead of system.out.println()