В чем разница между абстрактными классами в Java и Kotlin

«В чем разница между абстрактными классами в Java и Kotlin» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin абстрактные классы похожи на Java, но с некоторыми отличиями:

  1. Объявление: В Kotlin используется ключевое слово abstract перед class
abstract class Animal {
    abstract fun makeSound()
}
  1. Свойства: В Kotlin абстрактные классы могут иметь абстрактные свойства (в Java - только методы)
abstract class Shape {
    abstract val area: Double
}
  1. Реализация по умолчанию: В Kotlin абстрактные классы могут содержать неабстрактные члены с реализацией (как и в Java)

  2. Модификаторы: В Kotlin все абстрактные члены по умолчанию open (не нужно явно указывать)

  3. Интерфейсы vs абстрактные классы: В Kotlin интерфейсы могут содержать реализацию методов (как default-методы в Java 8+), что уменьшает необходимость в абстрактных классах