Inheritance
Tujuan Pembelajaran
Section titled “Tujuan Pembelajaran”Setelah membaca halaman ini, kamu diharapkan dapat:
- Menjelaskan arti dari pilar Inheritance (Pewarisan).
- Menggunakan kata kunci
extendsuntuk membuat class anak. - Menggunakan method
super()untuk memanggil constructor class induk.
Pendahuluan
Section titled “Pendahuluan”Seringkali kita membutuhkan beberapa class yang memiliki properti dasar yang sama. Contohnya: Siswa dan Guru. Keduanya adalah Manusia (memiliki nama dan alamat). Dibanding menulis ulang properti nama dan alamat di kedua class tersebut, kita bisa menggunakan pilar Inheritance atau pewarisan.
Penjelasan Materi: Pewarisan Class
Section titled “Penjelasan Materi: Pewarisan Class”Inheritance adalah pilar OOP yang memungkinkan sebuah class (disebut class anak atau subclass) mewarisi properti dan method dari class lain (disebut class induk atau superclass).
Sintaks penulisan di TypeScript menggunakan kata kunci extends:
class ClassAnak extends ClassInduk { // Properti dan method tambahan khusus anak}Analogi Kehidupan Sehari-hari: Sifat Anak Mewarisi Orang Tua
Section titled “Analogi Kehidupan Sehari-hari: Sifat Anak Mewarisi Orang Tua”Bayangkan dalam biologi:
Orang Tua (Class Induk) ├── Warna Kulit: Sawo matang └── Jenis Rambut: Lurus
Anak (Class Anak) ├── Warna Kulit: Sawo matang (warisan otomatis) ├── Jenis Rambut: Lurus (warisan otomatis) └── Kemampuan Khusus: Jago main gitar (ciri khusus anak sendiri)Anak mewarisi ciri dasar dari orang tuanya tanpa perlu membuat ulang dari awal, lalu ia menambahkan ciri khas uniknya sendiri.
Visual Illustration: Struktur Pewarisan
Section titled “Visual Illustration: Struktur Pewarisan” Superclass: Manusia { nama, umur } │ ├───────────extends───────────┐ │ │ ▼ ▼Subclass: Siswa { nis, kelas } Subclass: Guru { nip, mapel }(Otomatis memiliki nama & umur) (Otomatis memiliki nama & umur)Penggunaan super() di dalam Constructor
Section titled “Penggunaan super() di dalam Constructor”Jika class induk memiliki constructor, maka constructor pada class anak wajib memanggil method super() di baris pertama tubuh constructor anak. Method super() berguna untuk memanggil constructor class induk agar data induk terinisialisasi dengan benar.
class Siswa extends Manusia { constructor(nama: string, umur: number, public nis: number) { super(nama, umur); // memanggil constructor Manusia }}Mari Mencoba: Pewarisan Class
Section titled “Mari Mencoba: Pewarisan Class”Mari kita buat program pewarisan class Orang ke Siswa dan Guru.
Buat file bernama src/bab8/pewarisan.ts:
// 1. Class Induk (Superclass)class Orang { constructor(public nama: string, public umur: number) {}
tampilkanIdentitas(): void { console.log(`Nama: ${this.nama} | Usia: ${this.umur} tahun`); }}
// 2. Class Anak (Subclass) Siswaclass Siswa extends Orang { constructor(nama: string, umur: number, public nis: number) { super(nama, umur); // wajib memanggil constructor induk di baris pertama }
// Method khusus siswa belajar(): void { console.log(`${this.nama} (NIS: ${this.nis}) sedang belajar pemrograman.`); }}
// 3. Class Anak (Subclass) Guruclass Guru extends Orang { constructor(nama: string, umur: number, public nip: number, public mapel: string) { super(nama, umur); }
// Method khusus guru mengajar(): void { console.log(`${this.nama} (NIP: ${this.nip}) sedang mengajar ${this.mapel}.`); }}
// --- Menggunakan Class ---const siswaRpl = new Siswa("Putra Ramadhan", 17, 351501);const guruRpl = new Guru("Pak Budi", 35, 198706, "TypeScript OOP");
console.log("=== DATA SISWA ===");siswaRpl.tampilkanIdentitas(); // method warisan dari OrangsiswaRpl.belajar(); // method khusus Siswa
console.log("\n=== DATA GURU ===");guruRpl.tampilkanIdentitas(); // method warisan dari OrangguruRpl.mengajar(); // method khusus GuruJalankan dengan perintah:
tsx src/bab8/pewarisan.tsOutput
Section titled “Output”=== DATA SISWA ===Nama: Putra Ramadhan | Usia: 17 tahunPutra Ramadhan (NIS: 351501) sedang belajar pemrograman.
=== DATA GURU ===Nama: Pak Budi | Usia: 35 tahunPak Budi (NIP: 198706) sedang mengajar TypeScript OOP.Kesalahan yang Sering Terjadi
Section titled “Kesalahan yang Sering Terjadi”❌ Menuliskan kode sebelum memanggil super() di constructor anak
Section titled “❌ Menuliskan kode sebelum memanggil super() di constructor anak”constructor(nama: string, public nis: number) { this.nis = nis; // Error! super(nama); // 'super' must be called before accessing 'this'}Perbaikan: Pastikan pemanggilan super(...) selalu diletakkan di baris paling pertama di dalam tubuh constructor class anak.
Latihan
Section titled “Latihan”- Buat class induk
Kendaraandengan constructor menerima propertimerkdan methodjalan(). - Buat class anak
Mobilyang meng-extendsKendaraandan menambah propertijumlahPintudi constructor-nya. - Buat objek mobil baru dan jalankan method
jalan()miliknya.
Ringkasan
Section titled “Ringkasan”- Pewarisan menggunakan kata kunci
extendsuntuk menyalin properti/method class induk ke class anak. - Menghemat penulisan kode berulang.
- Menggunakan
super()di constructor anak untuk menjalankan constructor induk secara aman.