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 classAnimal
dan metodemakeSound()
untuk membolehkan inheritance. - Class
Dog
mewarisi dari classAnimal
dan mengoverride metodemakeSound()
untuk memberikan implementasi yang spesifik.
2. Menggunakan Inheritance
Langkah-langkah:
- Tentukan
open
untuk class yang ingin diwarisi. - Buat class child dengan sintaks
class ChildName : ParentName()
. - 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.