Interfaces Flashcards

1
Q

Diferencia entre interfaz y clase abstracta

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Se pueden usar accesores en las propiedades de las interfaces? Piensa ejemplo property con accesores

A

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}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Existe la herencia entre interfaces?

A

val backingProperty: String

val color: String
get() = “El coche es rojo”
set(value){otraProperty = value}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Que pasa si una clase hereda de dos interfaces con metodos implementados con el mismo nombre?

A

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>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Que es SAM?

A

Single abstract member interface. Interfaz que puede tener muchos non abstract members pero solo uno abstract

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Que ventaja tiene usar lambdas con SAM?

A

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}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly