Aggiungerei: ci sono alcune feature particolari del C che non sono presenti in Java.
Ad esempio non si possono specificare i parametri di default.
E per quanto ne so, non si puo' fare l'overload degli operatori, mentre e' consentito quello delle funzioni, ovviamente.
Ah!!! Le versioni precedenti di Java non avevano i template, tant'e' vero che esiste una versione non ufficiale che li supportava. Dalla versione 1.5 in poi sono stati introdotti sotto il nome di Generic: non sono cmq la stessa cosa del C++ e
soprattutto non hanno lo stesso utilizzo.
Java ha alcune caratteristiche che inizialmente sembrano limitarlo. In realta' spinge solamente a utilizzare correttamente il paradigma OOP.