I've read a lot of definitions of abstraction and how it is achieved in programming languages such as Java and C++ using interfaces (Java only) and abstract classes.
I understand that abstract classes and interfaces are required to allow multiple classes to provide their own implementations of the abstract methods and thus achieve abstraction.
Can we also consider a class that hides all its implementation details in private methods and provides a set of public methods (from which it calls the private methods internally) as having achieved abstraction as per object oriented design?
This question is specifically related to the mechanisms available in programming languages to achieve abstraction - I see interfaces and abstract classes mentioned commonly but not public methods.