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
superuntuk memanggil constructor atau method parent.
Contoh:
📌 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-
implementsharus di-override.Tidak bisa menggunakan
super.
Contoh:
📌 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
ChangeNotifier sudah punya addListener/removeListener/notifyListeners.
Dengan extends, MyController langsung mewarisi semua perilaku itu.
implements → Membuat kontrak antar layer
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 classimplements→ ❌ Tidak, semua method/field harus ditulis ulang
Override opsional
extends→ Opsional, hanya jika ingin mengubah perilakuimplements→ Wajib override semua member
Akses
superextends→ Bisa pakaisuper.method()atau panggil constructor parentimplements→ Tidak bisa
Use case umum
extends→ Reuse logika / subclassing (State<T>,ChangeNotifier,Widget)implements→ Kontrak/interface (Repository,Service,Cubit)
Kesimpulan
Gunakan
extendsbila ingin turunan dengan logika bawaan dari parent (misalnyaState<T>,ChangeNotifier,StatelessWidget).Gunakan
implementsbila hanya butuh kontrak/interface, agar class lain wajib menyediakan implementasi sendiri.
Pages
Links
