La característica más importante de la programación orientada a objetos es el encapsulado. Ocultar los detalles de implementación es obviamente crucial para escribir código que se pueda mantener.
En C++, como tiene punteros no controlados, es posible que un objeto mal escrito literalmente haga cualquier cosa con otro. Esto significa que la encapsulación está rota, y que los errores son difíciles de encontrar.
Java no tiene ese problema, pero carece de const-sidad básica. Eso no es estrictamente una característica teórica orientada a objetos, pero poder declarar que un método es de solo lectura, o que un objeto es de solo lectura, es un potenciador de confiabilidad fantástico en C++ que no está en Java.
Por último, el mecanismo de plantilla de java es una imitación pálida de C++. No poder parametrizar las clases es una gran pérdida para Java.
Dado que Java no admite punteros a los métodos, y la reflexión es demasiado lenta, obliga al uso de muchos objetos pequeños cuando un puntero a la función lo haría. Algunos pueden considerar que es algo bueno.
Eso implicaría que usted deletreara lo que quiere decir con "OO". –
Creo que el punto es que OP no * sabe * exactamente lo que significa y quiere algo en expansión mental. – Ken