Junior
Koje su glavne razlike između klase i interfejsa u Kotlinu?
sobes.tech АИ
Одговор од АИ
- Класа: може да садржи својства (статусе) и функције (понашање). Може бити апстрактна, отворена (за наследство) или финална. Конструктори одређују начин креирања објеката. Подржава наследство од једне класе и мултипле имплементацију интерфејса.
- Интерфејс: дефинише уговор понашања који класе морају имплементирати. Може садржати апстрактне декларације функција и својстава, као и функције са имплементацијом (Java 8+). Не може садржати стања (својства са бек-енд пољем). Једна класа може имплементирати више интерфејса. Нема конструкторе.
Упоредна табела:
| Аспекат | Класа | Интерфејс |
|---|---|---|
| Стање | Може имати својства са вредношћу. | Не може имати својства са вредношћу (само апстрактна). |
| Конструктори | Могу постојати. | Немају. |
| Имплементација | Може пружити потпуно имплементирање. | Пружа делимично или потпуно имплементирање (са подразумеваним методама). |
| Наслеђивање | Наслеђује од једне класе. | Имплементира више интерфејса. |
| Иницијализација | Може бити инстанцирана. | Не може бити директно инстанцирана. |
| Тип | Конкретан или апстрактан. | Само уговор понашања. |
Пример класе:
class Person(val name: String) { // класа са конструктором и својством
fun greet() {
println("Hello, my name is $name")
}
}
Пример интерфејса:
interface Greeter { // интерфејс са методом
fun greet()
}
class EnglishGreeter : Greeter { // класа која имплементира интерфејс
override fun greet() {
println("Hello!")
}
}