Learn
← Previous Next →

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