It provides templates: class templates, function templates, alias templates and variable templates. Which allow writing reusable code, while still preserving compile-time type checking and guaranteeing zero-overhead when using a template compared to using separate concrete implementations.
We would have to define what 'better' means. One of the reasons for the Java to be an industry standard is how time efficient it is. Now, what if 'better' would be defined as 'quicker available'?
Java and other higher-level languages provides (and arguably incites) code that is more maintainable through the use of abstraction. In other words, they consider lower-level features like memory management not as "function" but as "structure" which is only noise mixed on top of the business goal.
sources:
Jon Pearce (1998) Programming and Meta-Programming in Scheme: "Structure and function should be independent".
Lack of distinction between an object and a reference to it in Java. For example it makes concurrent programming more challenging if we cannot distinguish between local/our and shared objects by looking at the objects type.