Sobes.tech
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!")
    }
}