¿Cuáles son las diferencias entre las interfaces en Kotlin y Java?
sobes.tech AI
Respuesta de la IA
Diferencias principales:
-
Implementación de métodos por defecto: En Java 8 y versiones superiores, en las interfaces se pueden implementar métodos con cuerpo (métodos por defecto). En Kotlin, los métodos en interfaces tienen cuerpos por defecto. La palabra clave
defaultno es necesaria. -
Métodos abstractos y abiertos: En Java, todos los métodos de interfaz son implícitamente abstractos. Para hacer un método con cuerpo, se debe usar
default. En Kotlin, los métodos en interfaces con cuerpo son implícitamenteopeny pueden ser sobrescritos en las clases que implementan la interfaz. Los métodos sin cuerpo son implícitamenteabstract. -
Estado (Propiedades): En Java, las interfaces no pueden contener campos, solo constantes (
final static). En Kotlin, las interfaces pueden declarar propiedades abstractas, que deben ser implementadas en las clases, o propiedades con getters/setters por defecto (los campos de respaldo no almacenan datos). -
Constructores: En Java, las interfaces no pueden contener constructores. En Kotlin, las interfaces tampoco pueden contener constructores.
-
Modificadores de visibilidad: En Java, los métodos de interfaz son implícitamente
public. En Kotlin, los métodos de interfaz son implícitamentepublic open.
| Característica | Kotlin | Java |
|---|---|---|
| Implementación de métodos | Permitida (por defecto) | Permitida (con default) |
| Abstractidad de métodos | Sin cuerpo - abstract, con cuerpo - open |
Sin cuerpo - abstract, con cuerpo - default |
| Estado (Propiedades) | Permitidas (abstractas o con accesores) | No permitidas (solo constantes) |
| Constructores | No permitidos | No permitidos |
| Modificador de visibilidad | public open por defecto |
public por defecto |
Ejemplo en Kotlin:
interface MyInterface {
val myProperty: String // Propiedad abstracta
fun abstractMethod() // Método abstracto
fun defaultMethod() {
// Implementación por defecto
println("Implementación por defecto en interfaz Kotlin")
}
}
Ejemplo en Java:
interface MyInterfaceJava {
// No hay propiedades, solo constantes permitidas
// public static final String MY_CONSTANT = "valor";
void abstractMethod(); // Método abstracto (implícitamente público y abstracto)
default void defaultMethod() { // Método por defecto
// Implementación por defecto
System.out.println("Implementación por defecto en interfaz Java");
}
}