Method abstrak
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 44 dari 110.
Abstract method adalah method yang dideklarasikan di dalam abstract class tanpa isi. Method ini menentukan signature method, tetapi menyerahkan implementasinya kepada setiap subclass. Setiap class yang memperluas abstract class wajib meng-override semua abstract method, atau class tersebut juga akan menjadi abstract.
abstract class Animal {
// method abstrak: tidak memiliki isi, harus diimplementasikan oleh subclass
String makeSound();
// method konkret: memiliki isi yang digunakan bersama oleh semua subclass
void breathe() {
print('Breathing...');
}
}
class Dog extends Animal {
@override
String makeSound() {
return 'Woof!'; // Harus menyediakan implementasi
}
}
class Cat extends Animal {
@override
String makeSound() {
return 'Meow!'; // Implementasi berbeda, signature sama
}
}Jika subclass lupa mengimplementasikan method abstract, Dart akan memberi kamu error compile. Inilah inti dari semuanya, method abstract menegakkan sebuah kontrak. Setiap subclass dijamin memiliki method tersebut, jadi kamu bisa memanggilnya dengan aman pada instance apa pun dari tipe abstract.
// Kamu bisa menggunakan tipe abstrak sebagai tipe variabel
Animal a = Dog();
print(a.makeSound()); // Guk!
Animal b = Cat();
print(b.makeSound()); // Meong!Method abstrak berbeda dari method konkret dalam abstract class. Method konkret memiliki isi dan diwarisi apa adanya. Method abstrak tidak memiliki isi dan harus di-override.
Kamu dapat mencampur keduanya dalam abstract class yang sama untuk berbagi perilaku tertentu, sekaligus mewajibkan subclass mendefinisikan perilaku lainnya sendiri.
| Fitur | Method Abstrak | Method Konkret |
|---|---|---|
| Memiliki isi | Tidak | Ya |
| Harus ditimpa | Ya | Tidak |
| Tujuan | Menegakkan kontrak | Berbagi perilaku |
| Lokasi | Hanya pada class abstrak | Class apa pun |
Tantangan
MudahMari buat kalkulator bentuk yang menunjukkan cara kerja method abstrak. Kamu akan mendefinisikan class abstrak dengan method abstrak yang harus diimplementasikan secara berbeda oleh setiap bentuk, lalu menggunakan bentuk-bentuk tersebut melalui antarmuka umum.
Kamu akan mengatur kodemu ke dalam empat file:
shape.dart: Definisikan class abstrakShapedengan fieldfinalcolor(String) dan constructor yang menginisialisasinya. Deklarasikan dua method abstrak:double area()dandouble perimeter(). Tambahkan juga method konkretdescribe()yang mencetakA [color] shape with area: [area] and perimeter: [perimeter]. Karenaarea()danperimeter()bersifat abstrak, setiap subclass akan menyediakan perhitungannya sendiri, tetapidescribe()dapat digunakan oleh semuanya tanpa perlu dioverride.circle.dart: Buat classCircleyang memperluasShape. Class ini memiliki fieldfinalradius(double). Constructornya menerimacolordanradius, lalu meneruskancolorkesuper. Implementasikanarea()agar mengembalikan3.14 * radius * radiusdanperimeter()agar mengembalikan2 * 3.14 * radius.rectangle.dart: Buat classRectangleyang memperluasShape. Class ini memiliki fieldfinalwidthdanheight(keduanya double). Constructornya menerimacolor,width, danheight, lalu meneruskancolorkesuper. Implementasikanarea()agar mengembalikanwidth * heightdanperimeter()agar mengembalikan2 * (width + height).main.dart: Impor semua file. BuatCircledengan warna'red'dan radius5.0, sertaRectangledengan warna'blue', lebar4.0, dan tinggi6.0. Panggildescribe()pada setiap bentuk. Lalu buatList<Shape>yang berisi kedua bentuk, lakukan perulangan pada list tersebut, dan cetakArea: [area]untuk setiap bentuk.
Output yang diharapkan:
A red shape with area: 78.5 and perimeter: 31.400000000000002
A blue shape with area: 24.0 and perimeter: 20.0
Area: 78.5
Area: 24.0Coba sendiri
import 'shape.dart';
import 'circle.dart';
import 'rectangle.dart';
void main() {
// TODO: Buat Circle dengan warna 'red' dan radius 5.0
// TODO: Buat Rectangle dengan warna 'blue', lebar 4.0, dan tinggi 6.0
// TODO: Panggil describe() pada lingkaran
// TODO: Panggil describe() pada persegi panjang
// TODO: Buat List<Shape> yang berisi kedua bentuk
// TODO: Lakukan perulangan pada list dan cetak "Area: [area]" untuk setiap bentuk
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online