НОВИНКА!
Занимательная математика от Трепачёва. Присоединяйтесь к нам!
1254 of 1310 menu

Ключевое слово final

Ключевое слово final применяется к классам, методам и свойствам для запрета наследования и переопределения. Класс, помеченный как final, не может быть унаследован. Метод или свойство, помеченные как final, не могут быть переопределены в классах-потомках.

Синтаксис

final class ClassName { fun methodName() {} final val propertyName: Type }
open class ParentClass { final fun cannotOverride() {} open fun canOverride() {} }

Пример

Создадим final класс, который нельзя наследовать:

final class DateFormatter { fun formatDate(): String = "2023-12-31" } // Этот код вызовет ошибку компиляции: // class CustomFormatter : DateFormatter() {}

Пример

Создадим класс с final методом, который нельзя переопределить:

open class TimeProcessor { final fun getCurrentTime(): String = "12:00:00" open fun processTime(): String = "Processing time" } class AdvancedTimeProcessor : TimeProcessor() { // Этот код вызовет ошибку компиляции: // override fun getCurrentTime(): String = "12:05:00" override fun processTime(): String = "Advanced processing" }

Пример

Использование final со свойствами:

open class DateTimeConfig { final val defaultFormat: String = "YYYY-MM-DD HH:MM:SS" open val timeZone: String = "UTC" } class CustomDateTimeConfig : DateTimeConfig() { // Этот код вызовет ошибку компиляции: // override val defaultFormat: String = "DD.MM.YYYY" override val timeZone: String = "GMT+3" }

Пример

Практический пример с обработкой дат:

open class DateValidator { final val minYear: Int = 1900 final val maxYear: Int = 2100 final fun isValidYear(year: Int): Boolean { return year in minYear..maxYear } open fun validateDate(day: Int, month: Int, year: Int): Boolean { return isValidYear(year) && month in 1..12 && day in 1..31 } } class StrictDateValidator : DateValidator() { override fun validateDate(day: Int, month: Int, year: Int): Boolean { if (!super.validateDate(day, month, year)) return false // Дополнительная строгая валидация return month != 2 || day <= 29 } } val validator = StrictDateValidator() val res = validator.validateDate(29, 2, 2024) println(res)

Результат выполнения кода:

Boolean true

Примечания

В Kotlin по умолчанию все классы являются final, поэтому ключевое слово final для классов часто не используется явно. Для разрешения наследования необходимо использовать ключевое слово open.

Для методов и свойств поведение обратное: по умолчанию они не могут быть переопределены, и только с ключевым словом open разрешается переопределение.

Смотрите также

  • ключевое слово open,
    которое разрешает наследование и переопределение
  • ключевое слово override,
    которое используется для переопределения методов и свойств
  • модификатор abstract,
    который объявляет абстрактные классы и члены
  • модификатор interface,
    который используется для объявления интерфейсов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить