La définition des champs in
et out
dans la System
classe est:
public final static PrintStream out;
public final static InputStream in;
Ce sont des constantes. Ce sont aussi des objets, mais ce sont des constantes. C'est très similaire à la classe Math:
public static final double E = 2.7182818284590452354;
public static final double PI = 3.14159265358979323846;
Ou dans la classe booléenne:
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
Ou dans la classe Couleur:
public final static Color white = new Color(255, 255, 255);
public final static Color black = new Color(0, 0, 0);
public final static Color red = new Color(255, 0, 0);
Lorsque vous accédez à une constante publique qui ne change pas, il n'y a pas d'avantage significatif à l'encapsuler - conceptuellement ou en fonction des performances. C'est là. Ça ne va pas changer.
Il n'y a pas de réelle différence entre Color.white
et System.out
.