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

Ключевое слово override используется для переопределения методов и свойств, объявленных в родительском классе или интерфейсе. При переопределении дочерний класс предоставляет свою собственную реализацию метода или свойства, которая заменяет реализацию родительского класса.

Синтаксис

kotlinoverride fun methodName(parameters): ReturnType {
  // method body
}
kotlinoverride val propertyName: Type
  get() = // getter implementation
kotlinoverride var propertyName: Type = initialValue

Пример

Переопределение метода в дочернем классе:

kotlinopen class Animal {
  open fun makeSound() {
    println("Some generic animal sound")
  }
}

class Dog : Animal() {
  override fun makeSound() {
    println("Bark bark!")
  }
}

val dog = Dog()
dog.makeSound()

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

kotlinString "Bark bark!"

Пример

Переопределение свойства с собственной реализацией геттера:

kotlinopen class Shape {
  open val area: Double = 0.0
}

class Circle(val radius: Double) : Shape() {
  override val area: Double
    get() = Math.PI * radius * radius
}

val circle = Circle(5.0)
println(circle.area)

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

kotlinDouble 78.53981633974483

Пример

Переопределение свойства с инициализацией значения:

kotlinopen class Vehicle {
  open val maxSpeed: Int = 100
}

class SportsCar : Vehicle() {
  override val maxSpeed: Int = 250
}

val car = SportsCar()
println(car.maxSpeed)

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

kotlinInt 250

Пример

Переопределение метода с вызовом реализации родительского класса:

kotlinopen class Printer {
  open fun printMessage() {
    println("Base printer message")
  }
}

class ColorPrinter : Printer() {
  override fun printMessage() {
    super.printMessage()
    println("Color printer additional message")
  }
}

val printer = ColorPrinter()
printer.printMessage()

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

kotlinString "Base printer message"
String "Color printer additional message"

Пример

Переопределение абстрактных членов класса:

kotlinabstract class Database {
  abstract fun connect()
}

class MySQLDatabase : Database() {
  override fun connect() {
    println("MySQL database connected")
  }
}

val db = MySQLDatabase()
db.connect()

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

kotlinString "MySQL database connected"

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

  • ключевое слово open,
    которое позволяет наследование и переопределение
  • ключевое слово abstract,
    которое определяет абстрактные классы и члены
  • ключевое слово super,
    которое обеспечивает доступ к реализации родительского класса
  • ключевое слово class,
    которое определяет классы в Kotlin