Pewarisan memungkinkan kelas (subkelas atau anak) menggunakan kembali dan memperluas bidang dan metode kelas lain ( atau ). Ini memodelkan hubungan : .
Pewarisan memungkinkan kelas (subkelas atau anak) menggunakan kembali dan memperluas bidang dan metode kelas lain ( atau ). Ini memodelkan hubungan : .
DogAnimalclass Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Dog(Animal): # Dog inherits everything from Animal
def bark(self): # ...and adds new behavior
return "Woof!"
d = Dog("Rex")
print(d.eat()) # "Rex is eating" → inherited, not rewritten
print(d.bark()) # "Woof!" → Dog-specific
Dog mendapatkan __init__ dan eat secara gratis dan menambahkan bark. Subkelas juga dapat mengganti metode yang diwariskan untuk mengubah perilaku.
| Manfaat | Risiko |
|---|---|
| Penggunaan kembali kode bersama | Ketergantungan ketat pada induk |
| Memodelkan hierarki nyata | Kelas dasar yang rapuh — perubahan induk merusak anak |
| Polimorfisme melalui tipe bersama | Pohon mendalam sulit diikuti |
Panduan umum: lebih suka komposisi daripada pewarisan ketika hubungannya benar-benar "memiliki-a", bukan "adalah-a".
Perwarisan adalah fitur OOP yang paling disalahgunakan: mudah tergoda untuk menggunakannya hanya untuk berbagi kode, yang menggabungkan kelas yang tidak terkait.
Digunakan dengan benar — hanya untuk hubungan adalah-a yang asli — memberikan Anda penggunaan kembali ditambah polimorfisme, memungkinkan Anda memperlakukan banyak subtipe secara seragam melalui induk bersama mereka.