← Назад к вопросам

Когда стоит использовать abstract class?

1.2 Junior🔥 201 комментариев
#Kotlin основы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Abstract Class в Android и Kotlin

Abstract class (абстрактный класс) — это мощный инструмент в объектно-ориентированном программировании, который помогает создавать каркас для иерархии классов. Разберемся, когда его использовать.

Ключевые сценарии использования

1. Общее поведение и состояние

Abstract class идеален, когда нескольким классам нужно:

  • Наследовать общие поля (state)
  • Иметь общую реализацию методов
abstract class Animal {
    var name: String = ""
    var age: Int = 0
    
    fun eat() {
        println("$name eating...")
    }
    
    abstract fun makeSound()
}

class Dog(val name: String) : Animal() {
    override fun makeSound() {
        println("Woof!")
    }
}

2. Тесная связь между компонентами

Используй abstract class, когда классы-наследники:

  • Очень связаны между собой
  • Работают в одном семействе
  • Имеют общий контекст (все это фрагменты, все это presenters)
abstract class BaseActivity : AppCompatActivity() {
    protected fun setupToolbar(title: String) {
        // общая логика
    }
    
    abstract fun setupUI()
}

3. Protected/private члены класса

Abstract class может иметь protected members — методы и поля, видимые только наследникам:

abstract class DataProcessor {
    protected fun logData(msg: String) {
        // доступно только наследникам
    }
    
    abstract fun process(data: String): String
}

Interface vs Abstract Class

  • Interface: контракт/поведение, множественное наследование, no state
  • Abstract Class: семейство классов, общее состояние, protected members, конструкторы

Примеры в Android

Для Presenters:

abstract class BasePresenter<V> {
    protected var view: V? = null
    
    open fun onAttach(view: V) {
        this.view = view
    }
    
    abstract fun loadData()
}

Для хранилищ (Repository):

abstract class BaseRepository {
    protected fun handleError(exception: Exception) {
        // общая логика обработки ошибок
    }
}

Когда НЕ использовать

  • Если только один класс-наследник (просто обычный класс)
  • Если нет общего состояния (используй interface)
  • Если нужно множественное наследование (только interface)

Заключение

Abstract class — идеален для семейства классов с общим состоянием и поведением. Interface — для контракта на поведение. Android часто использует abstract базовые классы (Activity, Fragment, Presenter) для переиспользования логики и консистентного подхода во всем приложении.

Когда стоит использовать abstract class? | PrepBro