Quais são as diferenças entre as interfaces em Kotlin e Java?
sobes.tech IA
Resposta da IA
Principais diferenças:
-
Implementação de métodos por defeito: No Java 8 e versões superiores, é possível implementar métodos com corpo (métodos por defeito) nas interfaces. No Kotlin, os métodos em interfaces têm corpos por defeito. A palavra-chave
defaultnão é necessária. -
Métodos abstratos e abertos: No Java, todos os métodos de interface são implicitamente abstratos. Para fazer um método com corpo, deve-se usar
default. No Kotlin, os métodos com corpo em interfaces são implicitamenteopene podem ser sobrescritos nas classes que implementam a interface. Métodos sem corpo são implicitamenteabstract. -
Estado (Propriedades): No Java, as interfaces não podem conter campos, apenas constantes (
final static). No Kotlin, as interfaces podem declarar propriedades abstratas, que devem ser implementadas nas classes, ou propriedades com getters/setters padrão (os campos de apoio não armazenam dados). -
Construtores: No Java, as interfaces não podem conter construtores. No Kotlin, as interfaces também não podem conter construtores.
-
Modificadores de visibilidade: No Java, os métodos de interface são implicitamente
public. No Kotlin, os métodos de interface são implicitamentepublic open.
| Característica | Kotlin | Java |
|---|---|---|
| Implementação de métodos | Permitida (por padrão) | Permitida (com default) |
| Abstratibilidade de métodos | Sem corpo - abstract, com corpo - open |
Sem corpo - abstract, com corpo - default |
| Estado (Propriedades) | Permitidas (abstratas ou com acessores) | Não permitidas (apenas constantes) |
| Construtores | Não permitidos | Não permitidos |
| Modificador de visibilidade | public open por padrão |
public por padrão |
Exemplo em Kotlin:
interface MyInterface {
val myProperty: String // Propriedade abstrata
fun abstractMethod() // Método abstrato
fun defaultMethod() {
// Implementação padrão
println("Implementação padrão na interface Kotlin")
}
}
Exemplo em Java:
interface MyInterfaceJava {
// Sem propriedades, apenas constantes permitidas
// public static final String MY_CONSTANT = "valor";
void abstractMethod(); // Método abstrato (implicitamente público e abstrato)
default void defaultMethod() { // Método padrão
// Implementação padrão
System.out.println("Implementação padrão na interface Java");
}
}