Inheritance


Inheritance adalah salah satu konsep dasar dalam pemrograman berorientasi objek yang memungkinkan sebuah class untuk mengambil sifat dan perilaku dari class lain. Dalam Kotlin, inheritance mengizinkan kita untuk membuat hierarki class yang lebih terorganisir dan reusable. Mari kita bahas konsep ini secara detail.

1. Konsep Dasar Inheritance

Dalam inheritance, kita memiliki dua jenis class:

  • Class Parent (Super Class): Class yang sifat dan perilakunya akan diwarisi.
  • Class Child (Sub Class): Class yang mewarisi sifat dan perilaku dari class parent.

Contoh sederhana:

open class Animal { // Class Parent
    open fun makeSound() {
        println("Animal makes a sound")
    }
}

class Dog : Animal() { // Class Child
    override fun makeSound() {
        println("Dog barks")
    }
}

Keterangan:

  • Keyword open diperlukan di class Animal dan metode makeSound() untuk membolehkan inheritance.
  • Class Dog mewarisi dari class Animal dan mengoverride metode makeSound() untuk memberikan implementasi yang spesifik.

2. Menggunakan Inheritance

Langkah-langkah:

  1. Tentukan open untuk class yang ingin diwarisi.
  2. Buat class child dengan sintaks class ChildName : ParentName().
  3. Override metode yang ingin ditulis ulang dengan keyword override.

Contoh:

open class Vehicle { // Parent Class
    open fun start() {
        println("Vehicle is starting")
    }
}

class Car : Vehicle() { // Child Class
    override fun start() {
        println("Car is starting")
    }

    fun honk() {
        println("Car is honking")
    }
}

fun main() {
    val myCar = Car()
    myCar.start() // Output: Car is starting
    myCar.honk()  // Output: Car is honking
}

3. Multiple Inheritance

Kotlin tidak mendukung multiple inheritance dengan menggunakan class, namun bisa dicapai melalui interface.

Contoh:

interface CanRun {
    fun run()
}

interface CanBark {
    fun bark()
}

class Dog : CanRun, CanBark {
    override fun run() {
        println("Dog is running")
    }

    override fun bark() {
        println("Dog is barking")
    }
}

fun main() {
    val myDog = Dog()
    myDog.run() // Output: Dog is running
    myDog.bark() // Output: Dog is barking
}

4. Visibility Modifiers

Dalam inheritance, kita juga bisa menggunakan modifier visibility:

  • public: Dapat diakses dari mana saja (default).
  • internal: Dapat diakses dalam modul yang sama.
  • protected: Hanya dapat diakses dalam class itu sendiri dan subclassnya.
  • private: Hanya dapat diakses dalam class itu sendiri.

Contoh:

open class Parent {
    protected fun display() {
        println("This is a protected method")
    }
}

class Child : Parent() {
    fun show() {
        display() // Dapat mengakses display() karena Child adalah subclass Parent
    }
}

5. Kesimpulan

Inheritance adalah mekanisme yang kuat dalam Kotlin memungkinkan kita untuk membangun class yang lebih terorganisir dan reusable. Dengan menggunakan keyword open, override, dan konsep interface, kita dapat membuat hierarki class yang fleksibel.