23.08.2025

23.08.2025

Flutter

Flutter

6 min

6 min

Perbedaan extends dan implements di Flutter / Dart

Perbedaan extends dan implements di Flutter / Dart

Perbedaan extends dan implements di Flutter/Dart

Dalam pemrograman Dart (termasuk Flutter), kita sering menemui dua kata kunci penting: extends dan implements.
Keduanya terlihat mirip, tapi sebenarnya punya peran berbeda:

  • extends → untuk pewarisan logika (inheritance).

  • implements → untuk kontrak/interface.

Mari kita bahas satu per satu.

1. extends

Digunakan untuk inheritance (pewarisan).

  • Child class mewarisi field & method dari parent class.

  • Bisa override method/field dari parent.

  • Bisa akses super untuk memanggil constructor atau method parent.

Contoh:

class Animal {
  void eat() => print("Animal is eating");
}

class Dog extends Animal {
  @override
  void eat() => print("Dog is eating");  // override
}

void main() {
  final d = Dog();
  d.eat();          // "Dog is eating"
}

📌 Catatan: Dog mewarisi perilaku Animal, tapi bisa mengubah atau menambah sesuai kebutuhan.
✅ Cocok digunakan saat ingin reuse logika atau default implementation dari parent.

2. implements

Digunakan untuk kontrak/interface.

  • Child class tidak mewarisi implementasi, hanya janji untuk menyediakan method/field yang ada di parent.

  • Semua member dari class/interface yang di-implements harus di-override.

  • Tidak bisa menggunakan super.

Contoh:

class Animal {
  void eat() => print("Animal is eating");
}

class RobotDog implements Animal {
  @override
  void eat() => print("RobotDog is charging, not eating");
}

void main() {
  final rd = RobotDog();
  rd.eat();        // "RobotDog is charging, not eating"
}

📌 Catatan: RobotDog tidak mewarisi logika Animal, ia hanya janji punya method eat().
✅ Cocok digunakan untuk membuat kontrak/interface, misalnya Repository, Service, dsb.

3. Contoh Nyata di Flutter

extends → Reuse perilaku bawaan

class MyController extends ChangeNotifier {
  int count = 0;
  void increment() {
    count++;
    notifyListeners();
  }
}

ChangeNotifier sudah punya addListener/removeListener/notifyListeners.
Dengan extends, MyController langsung mewarisi semua perilaku itu.

implements → Membuat kontrak antar layer

abstract class AuthRepository {
  Future<void> login(String email, String password);
}

class AuthRepositoryImpl implements AuthRepository {
  @override
  Future<void> login(String email, String password) async {
    // implementasi API call
  }
}

Kalau nanti ada MockAuthRepository untuk unit test, cukup implements AuthRepository juga.

Perbedaan singkat extends vs implements

  • Pewarisan logika

    • extends → ✅ Ya, mewarisi field & method dari parent class

    • implements → ❌ Tidak, semua method/field harus ditulis ulang

  • Override opsional

    • extends → Opsional, hanya jika ingin mengubah perilaku

    • implements → Wajib override semua member

  • Akses super

    • extends → Bisa pakai super.method() atau panggil constructor parent

    • implements → Tidak bisa

  • Use case umum

    • extends → Reuse logika / subclassing (State<T>, ChangeNotifier, Widget)

    • implements → Kontrak/interface (Repository, Service, Cubit)

Kesimpulan

  • Gunakan extends bila ingin turunan dengan logika bawaan dari parent (misalnya State<T>, ChangeNotifier, StatelessWidget).

  • Gunakan implements bila hanya butuh kontrak/interface, agar class lain wajib menyediakan implementasi sendiri.

Create a free website with Framer, the website builder loved by startups, designers and agencies.