Sobes.tech
Junior — Middle

Czy można określić dziedziczenie między klasą danych a inną klasą?

sobes.tech AI

Odpowiedź od AI

W Kotlinie klasa danych (data class) może dziedziczyć po innej klasie, jeśli ta nie jest oznaczona jako final (czyli jest otwarta na dziedziczenie). Jednak klasa danych automatycznie dziedziczy od Any i musi mieć co najmniej jeden parametr w konstruktorze.

Ważne:

  • Klasa danych nie może być open ani abstract.
  • Dziedziczenie po klasie danych jest możliwe, ale sama klasa danych nie może być klasą nadrzędną (czyli nie można dziedziczyć z data class).

Przykład:

open class Person(val name: String)

data class Employee(val id: Int, val person: Person) : Person(person.name)

W ten sposób dziedziczenie między klasą danych a inną klasą jest możliwe, ale z ograniczeniami, i częściej stosuje się kompozycję (wstawianie obiektów) zamiast dziedziczenia dla klas danych.