I think that abstraction represents only the essential things needed for the purpose as there are so many unnecessary properties. So why is it said that a class represents an abstraction?
1
It’s an abstraction as long as you work with it without knowing how its internal work. For the developer of a class, it’s not an abstraction until he works on something different (maybe a client of that class). For an integrator who has to make it work with a related class in the same project, it’s sometimes an abstraction (when he only uses its API and not its internals). As long as the API is well-designed and does all the client needs, that works fine.
In other words, a class bundles a lot of things that belong together and publishes them under one name. As long as it’s enough to know the name in order to think about that component of a system, that constitutes a reduction in complexity. Whenever you have to open up the bundle and look inside, the abstraction breaks down, and the reduction is lost. Since most classes are successful at doing their job through their API some of the time, abstraction is still a net win for computer people – an indispensable one, for systems of the size that is now common.