0

Overriding Method

 


Overriding adalah teknik untuk kita melakukan perombakan (baik secara keseluruhan maupun tidak) pada sebuah method ataupun constructor yang dimiliki oleh parent class. Sehingga, ia dapat disesuaikan dengan behavior di child class.

Overriding Constructor

Sebelumnya kita telah mempelajari tentang constructor dan juga pewarisan. Pada contoh kasus di inheritance atau pewarisan, kita menemukan kasus seperti di bawah ini.

  1. class WhatsApp extends Mail{
  2.   constructor() {
  3.     super();
  4.     this.username = 'dicoding';
  5.     this.isBussinessAccount = true;
  6.   }
  7. }
  8.  
  9. //pemanggilan
  10. const wa1 = new WhatsApp('080111000222');

Sekarang bagaimana jika kita menambahkan username dan isBussinessAccount ke dalam constructor? Jika kita membuat constructor baru kodenya akan seperti ini:

  1. class WhatsApp extends Mail {
  2.     constructor(username, isBussinessAccount, phoneNumber) {
  3.         super();
  4.         this.username = username;
  5.         this.isBussinessAccount = isBussinessAccount;
  6.     }
  7. }
  8.  
  9. const wa1 = new WhatsApp('dicoding', true, '089989090898');

Lalu apakah properti wa1.from masih bisa diakses? Kita coba saja.

Ups! Hasilnya undefined. Hal itu terjadi karena constructor pada kelas parent kita sudah tergantikan dengan constructor turunannya. Solusinya, kita dapat memanfaatkan operator super() dengan memberikan nilai yang dibutuhkan untuk mengeksekusi constructor parent-nya. Sehingga constructor parent tetap terpanggil dengan benar.

Silakan ubah constructor pada kelas WhatsApp menjadi seperti ini.

  1. constructor(username, isBussinessAccount, phoneNumber) {
  2.   super(phoneNumber);
  3.   this.username = username;
  4.   this.isBussinessAccount = isBusinessAccount;
  5. }


Jalankan kembali kode pada interactive code dan kini hasilnya sudah tidak undefined lagi.


Overriding Method

Hampir sama dengan overriding constructor, tetapi yang di-override di sini adalah method yang ada pada parent class. Pada dasarnya semua method yang ada pada kelas parent dapat diakses langsung di child kelasnya (as is).

  1. super.methodName();

Kadang kita tidak menggunakan sebuah method seutuhnya sama seperti parent kelasnya. Namun, kita dapat menambahkan perintah tertentu ataupun menguranginya. Berikut merupakan contoh override pada method sendMessage.

  1. class WhatsApp extends Mail {
  2.     constructor(username, isBussinessAccount, phoneNumber) {
  3.         super(phoneNumber);
  4.         this.username = username;
  5.         this.isBussinessAccount = isBussinessAccount;
  6.     }
  7.  
  8.     // Overriding method => Melakukan Override Total
  9.     sendMessage(msg, to) {
  10.         console.log('Send by WA');
  11.     }
  12. }

Ketika kita memanggil method sendMessage pada contoh di atas, ia hanya akan mengeksekusi kode yang ada pada child class.

  1. const wa1 = new WhatsApp('di', true, '089000999888');
  2. wa1.sendMessage('halo', '089000999888');
  3.  
  4. /**
  5. Output:
  6. Send by WA
  7. **/

Untuk tetap melakukan eksekusi kode pada parent class maka perlu menggunakan operator super.methodName().

  1. sendMessage(msg, to) {
  2.     super.sendMessage(msg, to);
  3.     console.log('Send by WA');
  4. }

Catatan:

super(...) digunakan untuk memanggil constructor parent dan hanya dapat digunakan di constructor.

super.methodName(...) digunakan untuk memanggil parent method.

Posting Komentar
Theme
Share
Additional JS