Masukkan Password
59 6.8 Types of Inheritance in OOP | Inheritance in OOP with Dart Programming | Learn OOP | Dart Course
Materi kali ini membahas 3 jenis inheritance (pewarisan) dalam OOP Dart, yaitu:
- Single Inheritance
- Multilevel Inheritance
- Hierarchical Inheritance
Sebenarnya konsep dasarnya sudah kamu pelajari sebelumnya, yaitu extends dan super. Sekarang kita belajar bentuk hubungan antar-class yang bisa dibuat dengan inheritance.
1. Ingat Lagi: Apa Itu Inheritance?
Inheritance adalah mekanisme ketika sebuah class mewarisi member dari class lain.
Misalnya:
class Person {
String name = "Budi";
}
class Student extends Person {
}
Karena:
class Student extends Person
maka:
Person
↑
│
Student
Person disebut parent class, sedangkan Student disebut child class.
Object Student bisa mengakses name yang berasal dari Person.
void main() {
Student student = Student();
print(student.name);
}
2. Tiga Jenis Inheritance
Secara sederhana:
Inheritance
│
├── Single
├── Multilevel
└── Hierarchical
Perbedaan utamanya ada pada bentuk hubungan class-nya.
3. Single Inheritance
Apa itu Single Inheritance?
Single inheritance adalah inheritance yang hanya mempunyai:
- 1 parent
- 1 child
Bentuknya:
Parent
│
↓
Child
Contoh:
Class A
│
↓
Class B
A adalah parent.
B adalah child.
4. Contoh Single Inheritance
class A {
A() {
print("Class A");
}
String name = "Budi";
}
class B extends A {
B() {
print("Class B");
}
}
Kemudian:
void main() {
B obj = B();
}
Output:
Class A
Class B
Kenapa Class A ikut dipanggil?
Karena B adalah child dari A.
Ketika membuat object:
B obj = B();
constructor parent juga ikut diproses.
Secara sederhana:
B dibuat
↓
A constructor
↓
B constructor
↓
Object B selesai dibuat
5. Child Bisa Mengakses Property Parent
Perhatikan:
class A {
String name = "Budi";
}
class B extends A {
}
Property name sebenarnya berada di A.
Tetapi kita bisa:
void main() {
B obj = B();
print(obj.name);
}
Output:
Budi
Karena:
A
└── name
↓ diwariskan
B
└── bisa menggunakan name
Inilah inti single inheritance.
6. Analogi Single Inheritance
Bayangkan:
Kendaraan
│
↓
Mobil
Kendaraan memiliki:
- roda
- bergerak
- kecepatan
Mobil merupakan kendaraan.
Jadi:
Kendaraan
├── roda
├── bergerak()
└── kecepatan
↓ diwariskan
Mobil
├── roda
├── bergerak()
├── kecepatan
└── bukaBagasi()
Secara konsep:
class Vehicle {
void move() {
print("Vehicle is moving");
}
}
class Car extends Vehicle {
void openTrunk() {
print("Trunk opened");
}
}
7. Multilevel Inheritance
Sekarang kita masuk ke jenis kedua.
Multilevel inheritance berarti inheritance dilakukan bertingkat.
Misalnya:
A
│
↓
B
│
↓
C
Di sini:
Aadalah parent dariBBadalah parent dariCCadalah child dariBCjuga secara tidak langsung merupakan turunan dariA
8. Contoh Multilevel Inheritance
class A {
String nameA = "Name A";
}
class B extends A {
String nameB = "Name B";
}
class C extends B {
String nameC = "Name C";
}
Sekarang:
void main() {
C obj = C();
print(obj.nameA);
print(obj.nameB);
print(obj.nameC);
}
Output:
Name A
Name B
Name C
Kenapa object C bisa mengakses semuanya?
Karena:
A
│
│ extends
↓
B
│
│ extends
↓
C
C mewarisi dari B.
B mewarisi dari A.
Jadi C memperoleh member dari rantai inheritance tersebut.
9. Visualisasi Multilevel
Bayangkan seperti silsilah:
A
│
↓
B
│
↓
C
Property:
A
└── nameA
B
└── nameB
C
└── nameC
Object C secara konsep dapat menggunakan:
C
├── nameC ← milik C
├── nameB ← dari B
└── nameA ← dari A melalui B
10. Analogi Multilevel
Misalnya:
Makhluk Hidup
│
↓
Hewan
│
↓
Kucing
Kita bisa membuat:
class LivingThing {
void breathe() {
print("Breathing");
}
}
class Animal extends LivingThing {
void eat() {
print("Eating");
}
}
class Cat extends Animal {
void meow() {
print("Meow");
}
}
Kemudian:
void main() {
Cat cat = Cat();
cat.breathe();
cat.eat();
cat.meow();
}
Output:
Breathing
Eating
Meow
Karena:
LivingThing
↓
Animal
↓
Cat
Cat mendapatkan:
breathe()dariLivingThingeat()dariAnimalmeow()miliknya sendiri
11. Constructor pada Multilevel Inheritance
Misalnya:
class A {
A() {
print("A");
}
}
class B extends A {
B() {
print("B");
}
}
class C extends B {
C() {
print("C");
}
}
Kemudian:
void main() {
C obj = C();
}
Output:
A
B
C
Mengapa?
Karena constructor diproses dari parent paling atas menuju child.
C dibuat
↓
A constructor
↓
B constructor
↓
C constructor
Kalau ada parameter constructor, konsep super(...) bisa diteruskan lagi melalui rantai parent.
12. Hierarchical Inheritance
Sekarang jenis ketiga.
Hierarchical inheritance adalah ketika satu parent mempunyai beberapa child.
Bentuknya:
A
/ \
↓ ↓
B C
Jadi:
A= parentB= childC= child
B dan C sama-sama mewarisi A.
13. Contoh Hierarchical Inheritance
class A {
String name = "Budi";
void hello() {
print("Hello from A");
}
}
class B extends A {
void methodB() {
print("Method B");
}
}
class C extends A {
void methodC() {
print("Method C");
}
}
Sekarang kita buat object B:
void main() {
B objB = B();
print(objB.name);
objB.hello();
objB.methodB();
}
B bisa menggunakan:
name ← dari A
hello() ← dari A
methodB() ← milik B
14. Object C
Sekarang:
void main() {
C objC = C();
print(objC.name);
objC.hello();
objC.methodC();
}
C juga mendapatkan:
name ← dari A
hello() ← dari A
methodC() ← milik C
15. Tapi B Tidak Mewarisi C
Ini bagian yang sangat penting.
Kita punya:
A
/ \
↓ ↓
B C
B dan C sama-sama anak A.
Tetapi:
B ≠ parent C
C ≠ parent B
Jadi B tidak otomatis memiliki property/method khusus milik C.
Begitu juga C tidak memiliki property/method khusus milik B.
Misalnya:
class A {
void hello() {
print("Hello");
}
}
class B extends A {
void methodB() {
print("B");
}
}
class C extends A {
void methodC() {
print("C");
}
}
Object B:
B b = B();
b.hello(); // ✅ dari A
b.methodB(); // ✅ milik B
b.methodC(); // ❌ milik C
Object C:
C c = C();
c.hello(); // ✅ dari A
c.methodC(); // ✅ milik C
c.methodB(); // ❌ milik B
16. Analogi Hierarchical Inheritance
Misalnya:
Employee
/ \
/ \
↓ ↓
Programmer Designer
Employee mempunyai:
name
age
salary
work()
Kemudian Programmer punya:
programmingLanguage
code()
Designer punya:
designTool
design()
Maka:
Employee
├── name
├── age
├── salary
└── work()
│
├───────────────┐
↓ ↓
Programmer Designer
├── code() ├── design()
└── language └── designTool
Programmer mendapatkan member dari Employee.
Designer juga mendapatkan member dari Employee.
Tetapi Programmer tidak mendapatkan design() milik Designer.
17. Perbandingan Ketiga Jenis
Ini bagian yang paling penting untuk dihafalkan.
| Jenis | Bentuk | Contoh |
|---|---|---|
| Single | 1 parent → 1 child | A → B |
| Multilevel | parent → child → child | A → B → C |
| Hierarchical | 1 parent → banyak child | A → B dan A → C |
Visual:
Single
A
│
↓
B
Multilevel
A
│
↓
B
│
↓
C
Hierarchical
A
/ \
↓ ↓
B C
18. Cara Membedakan dengan Cepat
Kalau melihat:
A
│
B
👉 Single
Karena hanya satu hubungan parent-child.
Kalau melihat:
A
│
B
│
C
👉 Multilevel
Karena ada beberapa level.
Kalau melihat:
A
/ \
B C
👉 Hierarchical
Karena satu parent memiliki beberapa child.
19. Hubungan dengan extends
Ketiga jenis tersebut tetap menggunakan:
extends
Single
class B extends A {}
Multilevel
class B extends A {}
class C extends B {}
Hierarchical
class B extends A {}
class C extends A {}
Perhatikan perbedaannya:
Multilevel:
B extends A
C extends B
↑
berbeda
Hierarchical:
B extends A
C extends A
↑
sama-sama A
Ini cara paling gampang membedakannya.
20. Hal yang Perlu Diluruskan dari Caption
Ada satu bagian caption yang bisa membingungkan.
Pada hierarchical inheritance, caption mengatakan kira-kira:
B dan C tidak mempunyai hubungan satu sama lain.
Maksud yang lebih tepat:
B dan C tidak mempunyai hubungan parent-child langsung.
Tetapi keduanya tetap memiliki hubungan melalui parent:
A
/ \
B C
Jadi:
B ←→ C
bukan hubungan inheritance langsung.
Namun:
B ← A → C
mereka memiliki parent yang sama.
21. Apakah Dart Mendukung Semua Ini?
Untuk materi inheritance dasar yang sedang kita pelajari, Dart mendukung pola:
- single inheritance
- multilevel inheritance
- hierarchical inheritance
Tetapi ada satu hal penting:
Dart tidak menggunakan multiple class inheritance seperti beberapa bahasa lain.
Misalnya konsep:
A B
\ /
\ /
C
dengan satu class C langsung mewarisi dua class konkret sekaligus bukan pola inheritance class yang digunakan Dart.
Untuk berbagi kemampuan dari beberapa sumber, Dart memiliki mekanisme lain seperti mixins dan interfaces/implements, yang nanti bisa dipelajari terpisah.
22. Contoh Gabungan yang Lebih Realistis
Misalnya kita mempunyai:
class Person {
String name;
Person(this.name);
void introduce() {
print("My name is $name");
}
}
Kemudian:
class Student extends Person {
int marks;
Student(
String name,
this.marks,
) : super(name);
void study() {
print("$name is studying");
}
}
Dan:
class Teacher extends Person {
String subject;
Teacher(
String name,
this.subject,
) : super(name);
void teach() {
print("$name teaches $subject");
}
}
Strukturnya:
Person
/ \
↓ ↓
Student Teacher
Ini adalah hierarchical inheritance.
Student dan Teacher sama-sama mewarisi Person.
23. Apa Keuntungan Inheritance?
Salah satu keuntungan utama adalah code reuse, yaitu menggunakan kembali kode yang sudah ada.
Tanpa inheritance:
class Student {
String name;
int age;
void introduce() {}
}
class Teacher {
String name;
int age;
void introduce() {}
}
Ada kode yang berulang.
Dengan inheritance:
class Person {
String name;
int age;
void introduce() {}
}
class Student extends Person {
}
class Teacher extends Person {
}
Sekarang kode umum berada di Person.
Person
├── name
├── age
└── introduce()
│
├── Student
└── Teacher
Ini membuat program lebih mudah dikembangkan.
24. Tapi Jangan Menggunakan Inheritance Sembarangan
Inheritance cocok jika memang ada hubungan:
IS-A
Contoh:
Student IS-A Person
Dog IS-A Animal
Car IS-A Vehicle
Teacher IS-A Person
Masuk akal.
Tetapi:
Car IS-A Engine
tidak masuk akal.
Car memiliki engine:
Car
└── Engine
Ini lebih cocok menggunakan konsep composition, bukan inheritance.
25. Ringkasan Besar
Sekarang kita bisa membuat peta seperti ini:
INHERITANCE
│
┌───────────┼────────────┐
↓ ↓ ↓
SINGLE MULTILEVEL HIERARCHICAL
│ │ │
↓ ↓ ↓
A → B A → B → C A → B
A → C
Single
A
↓
B
Satu parent dan satu child.
Multilevel
A
↓
B
↓
C
Inheritance bertingkat.
Hierarchical
A
/ \
B C
Satu parent mempunyai beberapa child.
🧠 Cara Mengingat Paling Mudah
Bayangkan hubungan keluarga.
Single
Ayah
↓
Anak
Satu tingkat.
Multilevel
Kakek
↓
Ayah
↓
Anak
Bertingkat.
Hierarchical
Ayah
/ \
Anak1 Anak2
Satu parent punya beberapa anak.
⭐ Tiga pola yang wajib kamu kuasai
1. SINGLE
A
│
↓
B
2. MULTILEVEL
A
│
↓
B
│
↓
C
3. HIERARCHICAL
A
/ \
↓ ↓
B C
Dan kode Dart-nya:
// Single
class B extends A {}
// Multilevel
class B extends A {}
class C extends B {}
// Hierarchical
class B extends A {}
class C extends A {}
Kunci utamanya bukan menghafal istilahnya, tetapi melihat arah extends.
Kalau kamu melihat:
C extends B
B extends A
→ Multilevel
Kalau:
B extends A
C extends A
→ Hierarchical
Kalau hanya:
B extends A
→ Single.
Dengan memahami pola ini, kamu akan jauh lebih mudah ketika nanti masuk ke method overriding, super, polymorphism, abstract class, interface, dan mixin, karena semuanya masih berkaitan erat dengan hubungan parent-child dalam OOP.