With the interface, you can use other implementations later without changing all your code. For instance. if you use the List interface, it could be LinkedList, ArrayList, CopyOnWriteArrayList or something else.
You explain, implementation details are not important.
On the other hand, I would not create an interface for each class. In most cases, adding an interface later in the unlikely event that you really need it is not always difficult.
I would use the interface when you need a free connection, for example. when the caller is a different module or is used by another developer. If you have a tight connection, like a local package implementation, I cannot work with the interface.
In the above example, you can add unit test to find out which values ββare set, or the developer may want to use a buffer that registers which values ββare set. Using an interface makes this easy.
source share