I can't tell what you're interested in, whether you've made a mistake here, or whether you're learning about polymorphism, or what. But in any case because "name" is not static, it's polymorphic; the JVM chooses what method to call at runtime based on the actual type of the object. On the other hand, greeting is static, so it's up to the compiler to choose the method to call based on the compile-time type of the reference you call the method on.
So because the type of the reference "s" is "Super", Super.greeting() is called; but because the actual object is an instance of Sub, Sub.name() is called.
As you've discovered, only methods are polymorphic. Redeclaring a variable in a base class is often called "shadowing" or "hiding" the variable, and it's almost always a bad thing; it leads to difficult-to-understand behavior.
The right thing to do is to initialize the variable to a type-specific value in the class's constructor -- i.e.,
Now Test1 will print "Goodnight, Dick" because the copy of "s" in a Sub instance is set to "Dick" when the object is created.