Learn
← Previous Next →

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