classabstractoopMahir4 mnt baca

Abstract Class

Class yang tidak bisa diinstansiasi langsung, dengan method abstract wajib diimplementasi.

Cetak Biru yang Belum Jadi

Abstract class adalah class yang tidak boleh dibuat instance-nya. Ia hanya boleh diwariskan:

typescript
abstract class Bentuk {
  abstract luas(): number; // wajib diimplementasi subclass

  deskripsi(): string {
    return `Luas: ${this.luas()}`; // method konkret boleh ada
  }
}

const b = new Bentuk();
// Error: Cannot create an instance of an abstract class.

class Persegi extends Bentuk {
  constructor(private sisi: number) {
    super();
  }

  luas(): number {
    return this.sisi * this.sisi;
  }
}

const p = new Persegi(4);
console.log(p.deskripsi()); // "Luas: 16"

Subclass yang tidak mengimplementasikan semua method abstract ikut menjadi abstract (tidak bisa diinstansiasi) sampai dilengkapi.

Abstract Class vs Interface

Keduanya mendefinisikan kontrak, tapi beda kemampuan:

Abstract classInterface
Bisa punya implementasiYaTidak
Bisa punya constructor/stateYaTidak
Bisa di-extends berkali-kaliTidak (single inheritance)Ya (bisa implements banyak)
Ada di runtimeYaTidak (hilang saat kompilasi)

Pilih abstract class saat subclass-subclass berbagi logika atau state yang sama (seperti deskripsi() di atas). Pilih interface saat hanya butuh kontrak bentuk tanpa implementasi bersama.

Pola Template Method

Kekuatan abstract class terlihat di pola template method: kerangka algoritma ditulis sekali di parent, langkah spesifik diserahkan ke subclass:

typescript
abstract class Laporan {
  buat(): string {
    const kepala = this.kepalaLaporan();
    const isi = this.isiLaporan();
    return `${kepala}\n${isi}`;
  }

  protected abstract kepalaLaporan(): string;
  protected abstract isiLaporan(): string;
}

Setiap jenis laporan (PDF, Excel, teks) hanya mengisi dua method abstract, struktur buat() konsisten untuk semua.

Catatan teknis: Karena abstract class ada di runtime, ia bisa dipakai dengan instanceof. Interface tidak bisa. Kalau kamu butuh mengecek tipe object saat program jalan sekaligus berbagi implementasi, abstract class adalah jawabannya. Kalau hanya butuh kontrak tipe, interface lebih ringan.