¿Cuál es la principal diferencia entre una interface y una clase abstracta en Java?
Opciones
- No hay diferencia real, porque ambas definen métodos
- Una clase implementa muchas interfaces pero extiende una sola clase (Opción correcta)
- Las interfaces pueden tener campos de instancia; las clases abstractas no
- Las clases abstractas no pueden contener ningún método con código
Respuesta
Una clase puede implementar muchas interfaces pero extender solo una clase; una clase abstracta puede guardar estado (campos) y tener constructores
Por qué
Una interface es un contrato: una lista de métodos que una clase promete ofrecer (implements). Una clase puede implementar todas las interfaces que quiera.
Una clase abstracta es una clase a medio construir que puede tener campos, constructores y algunos métodos listos, más algunos métodos abstract por completar. Una clase solo puede hacer extend de UNA clase.
Desde Java 8 las interfaces también pueden tener métodos default con código, pero siguen sin poder guardar estado por objeto.
Recuerda
Muchas interfaces, una clase padre. Solo las clases abstractas guardan estado.