Interfaces Flashcards
Diferencia entre interfaz y clase abstracta
Una clase abastracta puede contener metodos y propiedades abstractas ademas de implementarlos. Todos aquellos abstractos deben ser sobreescritos por aquellos que hereden de esta. Por otro lado esta clase no puede ser instaciada, no podemos crear objetos de este tipo. En cuanto a las interfaces, estas son iguales que las clases abstractas excepto porque las interfaces no pueden tener inicializadores de propiedades, es decir estas siempre seran abstractas.
Se pueden usar accesores en las propiedades de las interfaces? Piensa ejemplo property con accesores
Si, se pueden usar pero no tienen backing fields. Si creamos properties con accesores no necesitan ser sobreescritas. Un ejemplo de property con accesores seria:
val backingProperty: String
val color: String
get() = “El coche es rojo”
set(value){otraProperty = value}
Existe la herencia entre interfaces?
val backingProperty: String
val color: String
get() = “El coche es rojo”
set(value){otraProperty = value}
Que pasa si una clase hereda de dos interfaces con metodos implementados con el mismo nombre?
Aunque esten implementados(no sean abstractos) la clase debe sobreesribirlos para diferenciar bien cuando hereda de uno o de otro
class D : A, B { override fun foo() { //Aunque no sean abstractos debe sobreescribirlos por tener mismo nombre super<a>.foo() super<b>.foo() }</b></a>
Que es SAM?
Single abstract member interface. Interfaz que puede tener muchos non abstract members pero solo uno abstract
Que ventaja tiene usar lambdas con SAM?
Nos evita mucho boilerplate ya que en vez de tener que sobreescribir el metodo podemos usar una lambda de la siguiente manera. Kotlin crea de esta manera un objeto que hereda de la functional interface o SAM de manera automatica
fun interface ParOImpar{ fun comprobacion(i:Int): Boolean }
val isEven = ParOImpar {it % 2 == 0}