Junior
Jakie są główne różnice między klasą a interfejsem w Kotlin?
sobes.tech AI
Odpowiedź od AI
- Klasa: może zawierać właściwości (stany) i funkcje (zachowanie). Może być abstrakcyjna, otwarta (do dziedziczenia) lub finalna. Konstruktorzy określają sposób tworzenia obiektów. Obsługuje dziedziczenie po jednej klasie i wielokrotną implementację interfejsów.
- Interfejs: definiuje kontrakt zachowania, który muszą implementować klasy. Może zawierać abstrakcyjne deklaracje funkcji i właściwości, a także funkcje z implementacją (Java 8+). Nie może zawierać stanów (właściwości z polem wsparcia). Klasa może implementować wiele interfejsów. Nie ma konstruktorów.
Tabela porównawcza:
| Aspekt | Klasa | Interfejs |
|---|---|---|
| Stan | Może mieć właściwości z wartością. | Nie może mieć właściwości z wartością (tylko abstrakcyjne). |
| Konstruktorzy | Mogą istnieć. | Nie mają. |
| Implementacja | Może zapewniać pełną implementację. | Zapewnia częściową lub pełną implementację (z metodami domyślnymi). |
| Dziedziczenie | Dziedziczy po jednej klasie. | Implementuje wiele interfejsów. |
| Inicjalizacja | Może być instancjonowana. | Nie może być bezpośrednio instancjonowana. |
| Typ | Konkretna lub abstrakcyjna. | Tylko kontrakt zachowania. |
Przykład klasy:
class Person(val name: String) { // klasa z konstruktorem i właściwością
fun greet() {
println("Hello, my name is $name")
}
}
Przykład interfejsu:
interface Greeter { // interfejs z metodą
fun greet()
}
class EnglishGreeter : Greeter { // klasa implementująca interfejs
override fun greet() {
println("Hello!")
}
}