Please see these past discussions:
When we use abstract and when we use interface...?[
^],
Difference between abstract class and interface if they have same no of methods and var[
^],
How to decide to choose Abstract class or an Interface[
^],
Interfaces and Polymorphism[
^].
As to your last question, it is not quite correct. The notion of "using interface" is quite ambiguous. When you use the interface type as a type, none of the method is ever implemented. But at the point you complete the code of some
struct or
class implementing some interface, all interface methods are implemented in full, otherwise the code will not compile. You can also use (and should use) the interface as a
compile-time type for some variable or member. But, during run-time, the actual
run-time type will always be some
struct or
class. Actually, before you get to interfaces, you should understand very well the run-time and compile-time types, through inheritance, virtual method and method override, a heart of OOP.
If "that method is not need to all that classes", it may simply mean that your code design is just bad. Perhaps you need to review a good number of use cases for interfaces to understand it.
—SA