There are two types of Adapter pattern. I have a clear preference for Object Adapters over Class Adapters where possible; I will explain this in detail later.
The Adapter pattern allows an existing class to be used with an interface that it doesn't match. It is often used to allow existing classes to work with others without needing to alter their source code.
This can be quite useful in a polymorphic setting where you are using third-party libraries, each with their own interface.
Fundamentally, an Adapter helps two incompatible interfaces work together. Otherwise incompatible classes can be made to work together by converting the interface of one class into an interface expected by the clients.
In a Class Adapter, we use inheritance ...