Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 Vehicle dengan property String brand dan int year. Sertakan constructor yang menerima kedua nilai tersebut dan method displayInfo() yang mencetak [brand] ([year])
    • Sebuah class Car yang memperluas Vehicle dan menambahkan property int doors. Sertakan method honk() yang mencetak Beep beep!
    • Sebuah class Motorcycle yang memperluas Vehicle dan menambahkan property bool hasSidecar. Sertakan method revEngine() yang mencetak Vroom!
  • main.dart: Impor file kendaraanmu dan tunjukkan cara kerja abstract class:
    • Buat Car dengan merek 'Toyota', tahun 2022, dan jumlah pintu 4
    • Panggil method displayInfo() miliknya (diwarisi dari Vehicle)
    • Cetak Doors: [doors]
    • Panggil method honk() miliknya
    • Cetak baris kosong
    • Buat Motorcycle dengan merek 'Harley', tahun 2021, dan hasSidecar false
    • Panggil method displayInfo() miliknya
    • Cetak Has sidecar: [hasSidecar]
    • Panggil method revEngine() miliknya

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
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online