Jakie są różnice między interfejsami w Kotlinie i Javie?
sobes.tech AI
Odpowiedź od AI
Główne różnice:
-
Implementacja metod domyślnych: W Java 8 i nowszych wersjach można implementować metody z ciałem (metody domyślne) w interfejsach. W Kotlinie metody w interfejsach mają domyślne ciała. Słowo kluczowe
defaultnie jest potrzebne. -
Metody abstrakcyjne i otwarte: W Java wszystkie metody interfejsu są domyślnie abstrakcyjne. Aby mieć metodę z ciałem, trzeba użyć
default. W Kotlinie metody z ciałem w interfejsach są domyślnieopeni mogą być nadpisywane w klasach implementujących interfejs. Metody bez ciała są domyślnieabstract. -
Stan (Właściwości): W Java interfejsy nie mogą zawierać pól, tylko stałe (
final static). W Kotlinie interfejsy mogą deklarować właściwości abstrakcyjne, które muszą być zaimplementowane w klasach, lub właściwości z domyślnymi getterami/setterami (backstage fields nie przechowują danych). -
Konstruktory: W Java interfejsy nie mogą zawierać konstruktorów. W Kotlinie interfejsy również nie mogą zawierać konstruktorów.
-
Modyfikatory widoczności: W Java metody interfejsu są domyślnie
public. W Kotlinie metody interfejsu są domyślniepublic open.
| Cecha | Kotlin | Java |
|---|---|---|
| Implementacja metod | Dozwolona (domyślnie) | Dozwolona (z default) |
| Abstrakcyjność metod | Bez ciała - abstract, z ciałem - open |
Bez ciała - abstract, z ciałem - default |
| Właściwości (Properties) | Dozwolone (abstrakcyjne lub z dostępami) | Nie dozwolone (tylko stałe) |
| Konstruktory | Nie dozwolone | Nie dozwolone |
| Modyfikator widoczności | public open domyślnie |
public domyślnie |
Przykład w Kotlinie:
interface MyInterface {
val myProperty: String // Właściwość abstrakcyjna
fun abstractMethod() // Metoda abstrakcyjna
fun defaultMethod() {
// Domyślna implementacja
println("Domyślna implementacja w interfejsie Kotlin")
}
}
Przykład w Javie:
interface MyInterfaceJava {
// Brak właściwości, dozwolone tylko stałe
// public static final String MY_CONSTANT = "wartość";
void abstractMethod(); // Metoda abstrakcyjna (domyślnie publiczna i abstrakcyjna)
default void defaultMethod() { // Metoda domyślna
// Domyślna implementacja
System.out.println("Domyślna implementacja w interfejsie Java");
}
}