In my old-fashioned mind, "low-level" means "closer to machine code
" while "high-level" means "farther from".
So, Java is far from being close to machine code while C is little more that machine code with macros, just in a portable way.
C++ is a little bit farther because of run-time support needed for classes (and other OO fancy stuff), yet still quite close to machine code.
Java is as close to machine code as a fish from the moon.
The "capabilities" is something that needs definition. Someone intends "expressivity power", someone else (like me) means "ability to do things".
Under the latter meaning, there's nothing Java does that cannot be done in C. The other way around seems to be not true.