Interfaces in Kotlin can contain declarations of abstract methods, as well as method implementations. What makes them different from abstract classes is that interfaces cannot store state. They can have properties but these need to be abstract or to provide accessor implementations.
An interface is defined using the keyword
A class or object can implement one or more interfaces
Properties in interfaces
You can declare properties in interfaces. A property declared in an interface can either be abstract, or it can provide implementations for accessors. Properties declared in interfaces can't have backing fields, and therefore accessors declared in interfaces can't reference them.
An interface can derive from other interfaces and thus both provide implementations for their members and declare new functions and properties. Quite naturally, classes implementing such an interface are only required to define the missing implementations:
Resolving overriding conflicts
When you declare many types in your supertype list, you may inherit more than one implementation of the same method. See the following example.
Interfaces A and B both declare functions foo() and bar(). Both of them implement foo(), but only B implements bar() (bar() is not marked abstract in A, because this is the default for interfaces, if the function has no body). Now, if you derive a concrete class C from A, you, obviously, have to override bar() and provide an implementation.
However, if you derive D from A and B, you need to implement all the methods which you have inherited from multiple interfaces, and to specify how exactly D should implement them. This rule applies both to methods for which you've inherited a single implementation (bar()) and multiple implementations (foo() ).