So the difference between the two methods is when the code is executed. When you initialize in the constructor, the code runs at runtime, when each new object is created. When you do this directly on a class member, the object is actually created at compile time and is statically referenced.
, Kitchen Milk. new Kitchen, , new Milk.
Egg . , - . , new Kitchen s Egg. , new Egg new Kitchen, , , , .
, new Egg , , , - , new Kitchen, !