Because Hobby is a nested class. A non-static nested class can access non-static variables/methods of the outer class (Solution), so to create an object of the non-static nested class you need an object of outer class. So if Hobby is not static you can create Hobby objects in non-static methods of Solution or using the below code
newSolution().newHobby();// or this waySolution s =newSolution();
s.newHobby();
On the other hand static nested classes can only access static variables/methods of the outer class and therefore their objects can be created without objects of the outer class.
Up to now you have always used sout with objects that you created in the class or transferred to it (or its method (main e.g.). So you have created it by yourself: (ExampleClass variablename= new ExampleClass(); )and this object was availible after that.
Now you don't have to make it . It's STATIC - always availible - you can use it everytime and everywhere.
I
interface Dream {
private static Hobby HOBBY = new Hobby(); //this is the moment of creation... a long time ago....and now you can use , use, and use it.
no matter where you want to do it.
}