Polimorfisme


Polimorfisme adalah konsep penting dalam pemrograman berorientasi objek yang memungkinkan objek-objek yang berbeda untuk diakses melalui antarmuka yang sama. Di Kotlin, kita dapat menerapkan polimorfisme melalui pewarisan dan penggunaan antarmuka.

Apa Itu Polimorfisme?

Polimorfisme berasal dari bahasa Yunani yang berarti "banyak bentuk". Dalam konteks OOP, polimorfisme memungkinkan kita untuk menggunakan satu antarmuka untuk melakukan berbagai tindakan. Dalam Kotlin, kita dapat menggunakan dua jenis polimorfisme:

  1. Polimorfisme Waktu Kompilasi (Compile-time Polymorphism): Dicapai melalui method overloading.
  2. Polimorfisme Waktu Eksekusi (Runtime Polymorphism): Dicapai melalui method overriding dan penggunaan antarmuka.

1. Polimorfisme Waktu Kompilasi

Method Overloading

Method overloading terjadi ketika beberapa metode dengan nama yang sama tetapi dengan parameter yang berbeda ada dalam satu kelas. Berikut adalah contoh:

class Calculator {
    fun add(a: Int, b: Int): Int {
        return a + b
    }

    fun add(a: Double, b: Double): Double {
        return a + b
    }
}

fun main() {
    val calculator = Calculator()
    println(calculator.add(5, 10))       // Output: 15
    println(calculator.add(5.5, 2.3))    // Output: 7.8
}

2. Polimorfisme Waktu Eksekusi

Method Overriding

Method overriding terjadi ketika subclass menyediakan implementasi untuk metode yang sudah didefinisikan dalam superclass.

open class Animal {
    open fun sound() {
        println("Some sound")
    }
}

class Dog : Animal() {
    override fun sound() {
        println("Bark")
    }
}

class Cat : Animal() {
    override fun sound() {
        println("Meow")
    }
}

fun main() {
    val myAnimal: Animal = Dog()
    myAnimal.sound()   // Output: Bark

    val myAnimal2: Animal = Cat()
    myAnimal2.sound()  // Output: Meow
}

Penggunaan Antarmuka

Kotlin juga mendukung polimorfisme melalui antarmuka. Berikut adalah contoh bagaimana antarmuka dapat digunakan untuk mencapai polimorfisme:

interface Vehicle {
    fun start()
}

class Car : Vehicle {
    override fun start() {
        println("Car started")
    }
}

class Bike : Vehicle {
    override fun start() {
        println("Bike started")
    }
}

fun startVehicle(vehicle: Vehicle) {
    vehicle.start()
}

fun main() {
    val car: Vehicle = Car()
    val bike: Vehicle = Bike()

    startVehicle(car)  // Output: Car started
    startVehicle(bike) // Output: Bike started
}

Kesimpulan

Polimorfisme adalah konsep penting dalam OOP yang memungkinkan kita untuk menggunakan objek dengan cara yang fleksibel dan umum. Dalam Kotlin, kita dapat menggunakan method overloading dan overriding di kelas dan antarmuka untuk mencapai polimorfisme. Dengan pemahaman ini, Anda dapat merancang aplikasi yang lebih abstrak dan mudah untuk dikelola.