Koje su razlike između interfejsa u Kotlinu i Javi?
sobes.tech АИ
Одговор од АИ
Основне разлике:
-
Реализација метода по подразумевану: У Јави 8 и новијим верзијама интерфејси могу имати методе са телом (default methods). У Kotlin-у, методи у интерфејсима имају подразумевана тела. Кључна реч
defaultније потребна. -
Абракти и отворени методи: У Јави, сви методи у интерфејсу су нејасно абстрактни. Да бисте направили метод са телом, користите
default. У Kotlin-у, методи у интерфејсу са телом су нејасноopenи могу бити преоптерећени у класи које реализују интерфејс. Методи без тела су нејасноabstract. -
Стање (Properties): У Јави, интерфејси не могу садржати поља, осим константи (
final static). У Kotlin-у, интерфејси могу објавити апстрактна својства која морају бити реализована у класи или својства са подразумеваним гетерима/сетерима (backstage field не чува). -
Конструктори: У Јави, интерфејси не могу садржати конструкторе. У Kotlin-у, интерфејси не могу садржати конструкторе.
-
Модификатори видљивости: У Јави, методи у интерфејсу су нејасно
public. У Kotlin-у, методи у интерфејсу су нејасноpublic open.
| Особина | Kotlin | Java |
|---|---|---|
| Реализација метода | Дозвољена (по подразумевану) | Дозвољена (са default) |
| Абстрактност метода | Без тела - abstract, са телом - open |
Без тела - abstract, са телом - default |
| Стање (Properties) | Дозвољени (апстрактни или са приступницима) | Непозвољени (само константе) |
| Конструктори | Непозвољени | Непозвољени |
| Модификатор видљивости | public open по подразумевану |
public по подразумевану |
Пример Kotlin:
interface MyInterface {
val myProperty: String // Апстрактно својство
fun abstractMethod() // Апстрактни метод
fun defaultMethod() {
// Метод по подразумевању
println("Default implementation in Kotlin interface")
}
}
Пример Јава:
interface MyInterfaceJava {
// Без својстава, дозвољени су само константи
// public static final String MY_CONSTANT = "value";
void abstractMethod(); // Апстрактни метод (нејасно јавни и апстрактни)
default void defaultMethod() { // Метод по подразумевању
// Дефаулт имплементација
System.out.println("Default implementation in Java interface");
}
}