Class Modifiers Pengubah Kelas

Mengatur izin pewarisan, implementasi, dan instansiasi kelas oleh pustaka eksternal, serta membatasi badan tipe

Urutan pengubah [abstract] [base/interface/final/sealed] [mixin] class; beberapa pengubah saling eksklusif

1. Tanpa pengubah

Semua pustaka boleh membuat instan, mewarisi, dan mengimplementasikan

// a.dart
class Vehicle {
  void move() {}
}

// b.dart
import 'a.dart';
Vehicle v = Vehicle();
class Car extends Vehicle {}
class Mock implements Vehicle {}
Code language: JavaScript (javascript)

2. abstract kelas abstrak

Tidak dapat diinstansiasi; kode eksternal boleh menggunakan extends /implements

abstract class Vehicle {
  void move(); // metode abstrak
}

// Sah
class Car extends Vehicle {
  @override void move() {}
}

class Mock implements Vehicle {
  @override void move() {}
}

// Vehicle(); // Galat, tidak bisa membuat instan
Code language: JavaScript (javascript)

3. base class

√ Boleh new|√ extends dari luar diizinkan|× implements dari luar dilarang

Menjamin subkelas pasti mewarisi implementasi induk, mencegah pembuatan implementasi palsu dari kode eksternal

// lib/a.dart
base class Vehicle {
  void move() => print("move");
}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();

base class Car extends Vehicle {} // √ Pewarisan wajib menuliskan base/final/sealed

// class Mock implements Vehicle {} // × Implementasi dari luar dilarang
Code language: JavaScript (javascript)

4. interface class

√ Boleh new|× extends dari luar dilarang|√ implements dari luar diizinkan

// a.dart
interface class Vehicle {
  void move() => print("move");
}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();

// class Car extends Vehicle {} // × Tidak boleh mewarisi dari luar
class Mock implements Vehicle { // √ Implementasi diizinkan
  @override void move() {}
}
Code language: PHP (php)

abstract interface

Antarmuka murni, paling sering dipakai

Tidak dapat diinstansiasi; dari luar hanya boleh melakukan implements

abstract interface class Vehicle {
  void move();
}
class Mock implements Vehicle {
  @override void move() {}
}
Code language: PHP (php)

5. final class

√ Boleh new|× extends dari luar dilarang|× implements dari luar dilarang

Tidak ada turunan dari luar, menjaga API publik agar stabil

// a.dart
final class Vehicle {}

// main.dart
import 'a.dart';
Vehicle v = Vehicle();
// class Car extends Vehicle {}    // ❌
// class Mock implements Vehicle{} // ❌
Code language: JavaScript (javascript)

6. sealed class (kelas tersegel)

× Tidak boleh new|× extends/implements dari luar dilarang;subkelas hanya boleh ditulis di berkas yang sama

Kompiler mengenali semua subkelas langsung, perintah switch wajib mencakup semua kasus

sealed class Vehicle {}

class Car extends Vehicle {}
class Bike extends Vehicle {}

void test(Vehicle v) {
  switch(v) {
    case Car(): print("car");
    case Bike(): print("bike");
  }
}
// Vehicle(); // ❌ sealed bersifat abstract secara implisit, tidak bisa diinstansiasi
Code language: PHP (php)

Aturan Saling Eksklusif

  1. sealed + abstract: sealed sudah memiliki sifat abstract, kombinasi dilarang
  2. interface/final/sealed + mixin: tidak dapat digabungkan
  3. Tidak boleh menuliskan base /interface/final /sealed bersamaan di tingkat yang sama

Class Modifiers Pengubah Kelas

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *