Определение:
Класс — это шаблон/описание для создания объектов, который инкапсулирует:
Характеристики класса:
public
, private
и т.д.)Пример класса в Kotlin:
class Car(
val model: String, // свойство
private var speed: Int // приватное свойство
) {
fun accelerate(amount: Int) { // метод
speed += amount
}
fun currentSpeed() = speed // метод
}
Определение:
Интерфейс — это контракт, который определяет что должен делать класс, но не как он это должен делать.
Характеристики интерфейса:
default
методы)public static final
)Пример интерфейса в Kotlin:
interface Drivable {
fun startEngine() // абстрактный метод
fun stopEngine() { // метод с реализацией
println("Engine stopped")
}
val maxSpeed: Int // абстрактное свойство
}
Характеристика | Класс | Интерфейс |
---|---|---|
Наследование | Одиночное (extends ) | Множественное (implements ) |
Состояние | Может хранить (поля) | Не может (кроме констант) |
Конструкторы | Имеются | Отсутствуют |
Реализация методов | Полная | Только абстрактные (обычно) |
Модификаторы доступа | Любые | Только public (по умолчанию) |
Использование | Для создания объектов | Для определения контрактов |
Интерфейс:
interface OnItemClickListener {
fun onItemClick(position: Int)
}
Класс, реализующий интерфейс:
class MyAdapter(private val listener: OnItemClickListener) : RecyclerView.Adapter<MyViewHolder>() {
// ...
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.itemView.setOnClickListener {
listener.onItemClick(position)
}
}
}
До Java 8:
public static final
)Java 8+:
default
методыstatic
методы в интерфейсахKotlin:
fun interface
)Используйте класс когда:
Используйте интерфейс когда:
P.S. На собеседованиях часто спрашивают про абстрактные классы как нечто среднее между классом и интерфейсом — будьте готовы к этому вопросу.