//supperclass
class MailService {
constructor(sender) {
this.sender = sender;
}
//Method yang kemampuannya sama antara kedua subclass biar tidak terjadi duplikasi kode
sendMessage(message, receiver) {
console.log(`${this.sender} sent ${message} to ${receiver}`);
}
}
//subclass
class WhatsAppService extends MailService {
sendBroadcastMessage(message, receivers) {
for (const receiver of receivers) {
this.sendMessage(message, receiver);
}
}
}
//subclass
class EmailService extends MailService {
sendDelayedMessage(message, receiver, delay) {
setTimeout(() => {
this.sendMessage(message, receiver);
}, delay);
}
}
//Lihatlah bahwa didalam subclass WhatsAppService dan EmailService kita tetap memiliki akses terhadap method dari superclass melalui keyword this
//karena subclass mewarisi sifat dari superclass
//Pemanggilan
const whatsapp = new WhatsAppService('+6281234567890'); //+6281234567890 sebagai sender
const email = new EmailService('dimas@dicoding.com');
whatsapp.sendMessage('Hello', '+6289876543210');
whatsapp.sendBroadcastMessage('Hello', ['+6211111111', '+6233333333']); //dapat mengirimkan 1 pesan ke 2 orang secara bersamaan
//whatsapp.sendDelayedMessage(); akan error
email.sendMessage('Hello', 'john@doe.com');
email.sendDelayedMessage('Hello', 'john@doe.com', 3000); //akan delay beberapa detik
//email.sendBroadcastMessage(); akan error