As you're from the Java world, the obvious answer would be that it's great not to be forced to write all that stuff you are forced to write, just to keep Java's type system happy.
Of course, there are other statically type checked languages that don't force you to write all that stuff that Java forces you to write.
Even C# does type inference for local method variables!
And there are other statically type checked languages that provide more compile time error checking than Java provides.
(The less obvious answers for - what is so great about dynamic typing in Python? - probably require more understanding of Python to understand.)