Hari 9: Inheritance & Polymorphism
60 min
Last updated 09 Apr 2026
Inheritance (Pewarisan)
class Hewan {
String nama;
int umur;
Hewan(this.nama, this.umur);
void bersuara() {
print("$nama bersuara...");
}
void info() {
print("Hewan: $nama, Umur: $umur tahun");
}
}
class Kucing extends Hewan {
String warna;
Kucing(String nama, int umur, this.warna) : super(nama, umur);
@override
void bersuara() {
print("$nama: Meong! Meong!");
}
}
class Anjing extends Hewan {
String ras;
Anjing(String nama, int umur, this.ras) : super(nama, umur);
@override
void bersuara() {
print("$nama (${ras}): Guk! Guk!");
}
}
void main() {
List hewan = [
Kucing("Tom", 3, "oranye"),
Anjing("Rex", 5, "Husky"),
Kucing("Luna", 2, "putih"),
];
for (var h in hewan) {
h.info();
h.bersuara(); // Polymorphism!
print("---");
}
}
Abstract Class & Interface
abstract class Bentuk {
double hitungLuas();
double hitungKeliling();
void info() {
print("Luas: ${hitungLuas()}, Keliling: ${hitungKeliling()}");
}
}
class Lingkaran extends Bentuk {
double radius;
Lingkaran(this.radius);
@override double hitungLuas() => 3.14 * radius * radius;
@override double hitungKeliling() => 2 * 3.14 * radius;
}
class Persegi extends Bentuk {
double sisi;
Persegi(this.sisi);
@override double hitungLuas() => sisi * sisi;
@override double hitungKeliling() => 4 * sisi;
}
void main() {
List bentuk = [Lingkaran(7), Persegi(5)];
bentuk.forEach((b) => b.info());
}
💡
Notice: abstract class tidak bisa diinstansiasi langsung. @override wajib saat override method.
Assignment
Buat abstract class Karyawan dengan Manager (bonus 50%) dan Staff.
Expected output:
Andi — Gaji: Rp 15000000
Budi — Gaji: Rp 5000000
Dart
main.dart
Solution
Output