Внешне - да, похожи. Т. к. и С++, и Java используют синтаксис С.
Внутренне - совершенно разные. Т. к. построены на разных принципах.
C++: мультипарадигменный, мешанина из конструкций как высокого, так и очень низкого (наследство С) уровня, управление памятью ручное, ООП построено на множественном наследовании, предназначен как для системного, так и для прикладного программирования.
Java: монопарадигменный (шаг в сторону от ООП - расстрел), высокоуровневый, управление памятью автоматическое, ООП большей частью построено на интерфейсах (наследование есть, но простое с единственным предком), предназначен только для прикладного программирования.