> what is abstraction ? how do we achieve it in java?
In the computer science meaning an abstraction is a programmer defined type. How abstractions are achieved programmatically is an extensive question. The best textbook on the topic is in my view Program Development in Java by Liskov/Guttag.
The authors are topnotch. Liskov even has an important OO principle named after her - the Liskov Substitution Principle.