the notion of abstraction is to distill complicated system down to its most fundamental parts and describe these parts in simpleprecise language typicallydescribing the parts of system involves naming them and explaining their functionality applying the abstraction paradigm to the design of data structures gives rise to abstract data types (adtsan adt is mathematical model of data structure that specifies the type of data storedthe operations supported on themand the types of parameters of the operations an adt specifies what each operation doesbut not how it does it in javaan adt can be expressed by an interfacewhich is simply list of method declarationswhere each method has an empty body (we say more about java interfaces in section an adt is realized by concrete data structurewhich is modeled in java by class class defines the data being stored and the operations supported by the objects that are instances of the class alsounlike interfacesclasses specify how the operations are performed in the body of each method java class is said to implement an interface if its methods include all the methods declared in the interfacethus providing body for them howevera class can have more methods than those of the interface encapsulation another important principle of object-oriented design is the concept of encapsulationwhich states that different components of software system should not reveal the internal details of their respective implementations one of the main advantages of encapsulation is that it gives the programmer freedom in implementing the details of system the only constraint on the programmer is to maintain the abstract interface that outsiders see