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.
