โ† Kembali ke Konsep OOP
๐ŸŒณ
Pilar

Inheritance (Pewarisan)

Memungkinkan sebuah class mewarisi state dan perilaku dari class induknya, membentuk relasi "is-a".

Masalahnya

Menduplikasi field dan method di class-class yang mirip bikin perawatan jadi repot: perbaikan atau fitur yang ditambahkan di satu tempat harus disalin manual ke tempat lain.

Cara Kerja

  • โ€บSubclass mewarisi field dan method dari superclass dan bisa meng-override perilakunya
  • โ€บMemodelkan relasi "is-a", misalnya Dog adalah Animal
  • โ€บHierarki yang terlalu dalam bisa kaku dan rapuh; pilih composition jika relasinya bukan benar-benar "is-a"
  • โ€บAbstract base class mendefinisikan kontrak bersama yang wajib dipenuhi subclass

Kapan Digunakan

โœ“Beberapa tipe berbagi field/perilaku yang sama dengan spesialisasi (Shape โ†’ Circle, Square)
โœ“Base class dari framework yang menyediakan perilaku default (UIViewController, Activity)
โœ“Memodelkan taksonomi alami dengan relasi "is-a" yang jelas

Contoh di Dunia Nyata

๐ŸŽ
iOS

UIButton mewarisi UIControl, yang mewarisi UIView

๐Ÿค–
Android

AppCompatActivity extends FragmentActivity extends Activity

๐ŸŒ
Web

HTMLInputElement dan HTMLButtonElement sama-sama extends HTMLElement

Contoh Kode

Swift
class Animal {
    let name: String
    init(name: String) { self.name = name }

    func makeSound() -> String {
        return "..."
    }
}

class Dog: Animal {
    override func makeSound() -> String {
        return "Woof!"
    }
}

class Cat: Animal {
    override func makeSound() -> String {
        return "Meow!"
    }
}

let animals: [Animal] = [Dog(name: "Rex"), Cat(name: "Whiskers")]
for animal in animals {
    print("\(animal.name): \(animal.makeSound())")
}