Polymorphism
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan arti dari pilar Polimorfisme.
- Melakukan method overriding di dalam class anak.
- Memanggil method overriding menggunakan array polimorfis.
Pendahuluan
Section titled “Pendahuluan”Polymorphism (berasal dari bahasa Yunani: poly = banyak, morph = bentuk) adalah pilar OOP ketiga yang memungkinkan sebuah method memiliki implementasi (cara kerja) yang berbeda-beda pada objek-objek yang berbeda, meskipun nama method-nya sama.
Penjelasan Materi: Method Overriding
Section titled “Penjelasan Materi: Method Overriding”Cara termudah menerapkan polimorfisme adalah dengan Method Overriding (menimpa method). Class anak menulis ulang method yang diwarisinya dari class induk agar memiliki perilaku khusus yang berbeda dari induknya.
class Manusia { sapa(): void { console.log("Halo"); }}
class OrangSunda extends Manusia { // Menimpa method sapa() milik Manusia sapa(): void { console.log("Sampurasun"); }}Analogi Kehidupan Sehari-hari: Remote Control Universal
Section titled “Analogi Kehidupan Sehari-hari: Remote Control Universal”Bayangkan kamu memiliki Remote Control TV Universal. Remote tersebut memiliki tombol POWER (nama method sama).
Tombol POWER ditekan: ├── Jika diarahkan ke TV Samsung ──► TV Samsung menyala ├── Jika diarahkan ke AC LG ──► AC LG menyala └── Jika diarahkan ke Audio Sony ──► Audio Sony menyalaAksi yang dilakukan sama: menekan tombol POWER. Tetapi respon setiap perangkat berbeda-beda tergantung benda apa yang menerimanya. Inilah esensi polimorfisme: satu perintah, banyak bentuk respon.
Visual Illustration: Method Overriding
Section titled “Visual Illustration: Method Overriding” Class Induk: Hewan { bersuara() } │ ┌────────────────┴────────────────┐ ▼ extends ▼ extends Class Kucing Class Anjing { bersuara() ──► "Meong" } { bersuara() ──► "Guk" }Mari Mencoba: Polimorfisme & Method Overriding
Section titled “Mari Mencoba: Polimorfisme & Method Overriding”Mari buat program yang mendemonstrasikan bagaimana method dengan nama yang sama bekerja secara berbeda pada beberapa objek hewan.
Buat file bernama src/bab8/polimorfisme.ts:
// 1. Class Indukclass Hewan { constructor(public nama: string) {}
// Method umum bersuara(): void { console.log("Hewan ini mengeluarkan suara."); }}
// 2. Class Anak Kucing (Menimpa bersuara)class Kucing extends Hewan { bersuara(): void { console.log(`${this.nama} mengeong: Meooong... 🐾`); }}
// 3. Class Anak Anjing (Menimpa bersuara)class Anjing extends Hewan { bersuara(): void { console.log(`${this.nama} menggonggong: Guk Guk! 🐕`); }}
// --- Menggunakan Polimorfisme ---// Membuat daftar hewan dalam satu tipe array induk (Hewan[])const daftarHewan: Hewan[] = [ new Kucing("Kitty"), new Anjing("Blacky"), new Kucing("Meongy")];
console.log("=== PADUAN SUARA HEWAN ===");for (const hewan of daftarHewan) { // Memanggil nama method yang sama, tapi responnya berbeda sesuai jenis objeknya hewan.bersuara();}Jalankan dengan perintah:
tsx src/bab8/polimorfisme.tsOutput
Section titled “Output”=== PADUAN SUARA HEWAN ===Kitty mengeong: Meooong... 🐾Blacky menggonggong: Guk Guk! 🐕Meongy mengeong: Meooong... 🐾Penjelasan Baris per Baris
Section titled “Penjelasan Baris per Baris”const daftarHewan: Hewan[]— kita menyimpan objekKucingdanAnjingke dalam satu tipe array indukHewan[]. Ini adalah fitur hebat polimorfisme: objek anak bisa dianggap sebagai tipe objek induknya.hewan.bersuara()— loop memanggil methodbersuara(). Komputer otomatis mencari apakah class anak memiliki versi method yang menimpa method induk, lalu menjalankannya.
Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”❌ Mengubah nama parameter saat menimpa (overriding) method induk
Section titled “❌ Mengubah nama parameter saat menimpa (overriding) method induk”Jika method induk menerima parameter (pesan: string), maka method anak yang menimpanya juga harus menerima tipe parameter yang sama. Mengubah tipe atau jumlah parameter akan membuat TypeScript error karena tanda tangan method tidak cocok.
Latihan
Section titled “Latihan”- Buat class induk
Pekerjaandengan methodtugas(). - Buat dua class anak:
GurudanProgrammeryang meng-extendsPekerjaandan menulis ulang methodtugas()dengan tindakan yang berbeda. - Buat array berisi objek Guru dan Programmer, jalankan method
tugas()menggunakan loop.
Ringkasan
Section titled “Ringkasan”- Polimorfisme memungkinkan satu method memiliki banyak bentuk implementasi berbeda.
- Penerapan utamanya menggunakan Method Overriding di class anak.
- Membantu menyederhanakan pemrosesan banyak jenis objek sejenis dalam satu array terpadu.