Abstraction is deciding what to leave out
You drive a car without knowing how fuel injection works. The steering wheel, pedals and gear stick are the interface. The engine is the implementation. You can learn to drive one car and drive any car, because every car exposes the same interface.
In code, abstraction means exposing what something does and hiding how it does it. Java gives you two tools for it, and choosing between them confuses almost everyone at first.
An interface is a pure contract
interface Payable {
long amountPaise();
default String receipt() {
return "Amount due: " + amountPaise() + " paise";
}
}