class Abstrak
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 43 dari 110.
class abstrak adalah class yang tidak dapat dibuat instance-nya secara langsung. Class ini berfungsi sebagai cetak biru untuk class lainnya, dengan mendefinisikan struktur umum yang harus diikuti oleh subclass. Kamu membuatnya menggunakan kata kunci abstract.
abstract class Shape {
String color;
Shape(this.color);
void describe() {
print('A $color shape');
}
}
class Circle extends Shape {
double radius;
Circle(String color, this.radius) : super(color);
}
void main() {
// Shape s = Shape('red'); // error! Tidak bisa membuat instance dari class abstrak
var circle = Circle('blue', 5.0);
circle.describe(); // Sebuah bentuk biru
}abstract class berguna saat kamu memiliki konsep yang terlalu umum untuk berdiri sendiri. “Shape” adalah sebuah gagasan, tetapi kamu tidak bisa menggambar bentuk tanpa mengetahui apakah bentuk itu lingkaran, persegi panjang, atau segitiga. abstract class menentukan hal-hal yang dimiliki semua bentuk, sedangkan subclass konkret memberikan detail yang spesifik.
Perhatikan bahwa abstract class tetap dapat memiliki method biasa dengan implementasi (seperti describe()) dan constructor. Subclass mewarisi keduanya seperti pada pewarisan biasa. Perbedaan utamanya adalah kamu tidak dapat membuat instance dari abstract class itu sendiri. Kamu harus menggunakan subclass konkret.
Tantangan
MudahMari buat sistem kendaraan yang menunjukkan bagaimana abstract class berfungsi sebagai cetak biru untuk tipe yang lebih spesifik. Kamu akan membuat abstract class dasar yang menentukan hal-hal yang dimiliki semua kendaraan, lalu memperluasnya dengan tipe kendaraan konkret.
Kamu akan mengatur kodemu dalam dua file:
vehicle.dart: Definisikan hierarki kendaraanmu di sini:- Sebuah
abstract class Vehicledengan propertyString branddanint year. Sertakan constructor yang menerima kedua nilai tersebut dan methoddisplayInfo()yang mencetak[brand] ([year]) - Sebuah class
Caryang memperluasVehicledan menambahkan propertyint doors. Sertakan methodhonk()yang mencetakBeep beep! - Sebuah class
Motorcycleyang memperluasVehicledan menambahkan propertybool hasSidecar. Sertakan methodrevEngine()yang mencetakVroom!
- Sebuah
main.dart: Impor file kendaraanmu dan tunjukkan cara kerja abstract class:- Buat
Cardengan merek'Toyota', tahun2022, dan jumlah pintu4 - Panggil method
displayInfo()miliknya (diwarisi dari Vehicle) - Cetak
Doors: [doors] - Panggil method
honk()miliknya - Cetak baris kosong
- Buat
Motorcycledengan merek'Harley', tahun2021, dan hasSidecarfalse - Panggil method
displayInfo()miliknya - Cetak
Has sidecar: [hasSidecar] - Panggil method
revEngine()miliknya
- Buat
Ingat, kamu tidak dapat membuat instance Vehicle secara langsung karena class ini bersifat abstrak. Kamu harus menggunakan salah satu subclass konkret. Car dan Motorcycle sama-sama mewarisi method displayInfo() dari parent class abstrak.
Output yang diharapkan:
Toyota (2022)
Doors: 4
Beep beep!
Harley (2021)
Has sidecar: false
Vroom!Coba sendiri
import 'vehicle.dart';
void main() {
// TODO: Buat Car dengan merek 'Toyota', tahun 2022, dan doors 4
// TODO: Panggil displayInfo() pada mobil
// TODO: Cetak "Doors: [doors]"
// TODO: Panggil honk() pada mobil
// TODO: Cetak satu baris kosong
// TODO: Buat Motorcycle dengan merek 'Harley', tahun 2021, dan hasSidecar false
// TODO: Panggil displayInfo() pada sepeda motor
// TODO: Cetak "Has sidecar: [hasSidecar]"
// TODO: Panggil revEngine() pada sepeda motor
}
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