В чем разница между перегрузкой метода и переопределением метода

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

Ответ

Перегрузка метода (overloading) — это создание нескольких методов с одинаковым именем, но разными параметрами (типами, количеством или порядком). Компилятор выбирает нужный метод на основе аргументов.

Пример:

fun sum(a: Int, b: Int) = a + b  
fun sum(a: Double, b: Double) = a + b  

Переопределение метода (overriding) — это изменение реализации метода в подклассе, унаследованного от суперкласса. Требует аннотации @Override (Java) или override (Kotlin).

Пример:

open class Parent {  
    open fun show() = println("Parent")  
}  
class Child : Parent() {  
    override fun show() = println("Child")  
}  

Ключевые отличия:

  • Перегрузка — в одном классе, переопределение — в иерархии наследования.
  • Перегрузка зависит от параметров, переопределение — от сигнатуры (имя + параметры).