Hari 11: Interface & Abstract Class
65 min
Last updated 09 Apr 2026
Interface — Kontrak tanpa Implementasi
interface Printable {
public function print(): void;
public function preview(): string;
}
interface Serializable {
public function toJson(): string;
}
// Class bisa implements banyak interface
class Laporan implements Printable, Serializable {
public function __construct(private string $judul, private array $data) {}
public function print(): void {
echo "=== {$this->judul} ===\n";
foreach ($this->data as $k => $v) echo " $k: $v\n";
}
public function preview(): string {
return "Laporan: {$this->judul}";
}
public function toJson(): string {
return json_encode(["judul" => $this->judul, "data" => $this->data]);
}
}
$lap = new Laporan("Penjualan", ["Jan" => 100, "Feb" => 150]);
$lap->print();
echo $lap->preview() . "\n";
echo $lap->toJson() . "\n";
Abstract Class — Kerangka Implementasi
abstract class Shape {
abstract public function luas(): float; // wajib di-override
abstract public function keliling(): float; // wajib di-override
public function deskripsi(): string { // boleh langsung digunakan
return sprintf("Luas: %.2f, Keliling: %.2f", $this->luas(), $this->keliling());
}
}
class Persegi extends Shape {
public function __construct(private float $sisi) {}
public function luas(): float { return $this->sisi ** 2; }
public function keliling(): float { return 4 * $this->sisi; }
}
$p = new Persegi(6);
echo $p->deskripsi(); // Luas: 36.00, Keliling: 24.00
💡
Notice: Interface menggunakan kata kunci "implements". Semua method interface HARUS diimplementasikan.
Assignment
Buat interface Kendaraan dengan method namaKendaraan(): string dan kecepatanMaks(): int. Buat class Motor implements Kendaraan (nama "Motor", maks 120) dan class Bus (nama "Bus", maks 90). Cetak nama dan kecepatan maks keduanya.
Expected output:
Motor: 120 km/h
Bus: 90 km/h
PHP
index.php
Solution
Output