Abstraction is deciding what to leave out. You name an operation by its intent and hide the steps behind that name. A caller writes save(order) and never learns whether that is a SQL insert, a file write or an HTTP call.
The techniques are ordinary. Interfaces state a contract with no implementation. Abstract classes fix a shape and leave gaps for subclasses. Ordinary methods give one name to a block of steps. Access modifiers back all of this up by keeping the internals out of reach.
A wrong abstraction costs more than none at all. If the contract you picked does not match how callers use the thing, every caller writes a workaround. Flags and escape hatches follow. Duplicated code is easier to fix later than a bad abstraction everyone depends on.
Rewriting in plainer words…
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.