Quick actions

cmd+k|ctrl+k

Navigation

Languages

Inheritance, Method Overriding & Static Method

Snippet info

Language

JavaScript

Visibility

public

Author

tulangrusuk.ku

Created

2020-08-03T15:32:58Z

Updated

2020-08-04T13:37:49Z

/* Incheritance (pewarisan) adalah sebuah solusi yang bisa digunakan utk 
mempermudah dalam membuat membuat properti dan method.
contoh class yang memiliki properti dan method serupa adalah
pesawat, mobil dan motor.
didalam body class ketiga nya memiliki manufacture, info() dan color().
Jika tanpa inheritance, setiap kali kita membuat class baru, maka kita akan
mebuat manufactrue, info() dan color secara berulang yang diamana itu akan
membuat pekerjaan kita jadi lebih lama, tapi dgn Inheritance kita bisa mncegah 
melakukan perulangan kode dan mengelompokkan properti dan method yang sama. 
Caranya dengan membuat sebuah class induk atau class baru yang nantinya 
akan diturunkan sifatnya pada class anak 

JavaScript jika kita ingin mewariskan sifat class, 
lakukan dengan keyword extends seperti berikut:

class ChildClass extends ParentClass {
    
}

Sebagai contoh mari kita buat class Vehicle yang nantinya akan kita gunakan 
sebagai parent class atau class induk :      
*/
class Vehicle{
    constructor(licensePlate, manufacture){
        this.licensePlate = licensePlate;
        this.manufacture = manufacture;
        this.engineActive = false;
    }
    
    // menambahkan method
    startEngines(){
        console.log(`Mesin ${this.manufacture} ${this.licensePlate} dinyalakan!`)
    }
    
    info(){
        console.log(`Nomor Kendaraan: ${this.licensePlate}`);
        console.log(`Manufacture: ${this.manufacture}`);
        console.log(`Mesin: ${this.engineActive? "Active" : "Inactive"}`);
    }
    
    parking(){
        console.log(`Kendaraan ${this.licensePlate}`);
    }
}

//Kemudian kita bisa membuat class Car sebagai class anak dari class Vehicle
/* JavaScript jika kita ingin mewariskan sifat class, lakukan dengan keyword extends 
arti dibawah : class Car sebagai class anak mewairisi 
class Vehicle sbg class induk */
class Car extends Vehicle{
    constructor(licensePlate, manufacture, wheels){
        super(licensePlate, manufacture); 
        this.wheels = wheels;
    }
    /* Keyword super pada constructor diats digunakan untuk mengakses properti 
    dan method yang ada pada induk class ketika berada pada class anak 
    
    Jadi super(lisencePlate, manufacture) di atas berarti kita mengakses 
    constructor dari parent class dan mengirimkan lisencePlate, 
    dan manufacture sebagai data yang dibutuhkan olehnya agar objek (instance) Car 
    berhasil dibuat.*/
    
    // membuat method
    driveOff(){
        console.log(`Kendaraan ${this.licensePlate}`);
    }
    
    // membuat method
    openDoor(){
        console.log(`Membuka pintu!`);
    }
    
    /* Method Overriding dilakukan saat kita ingin membuat ulang sebuah 
    method pada sub-class atau class anak.
    Untuk melakukan method overriding, kita tambahkan super diikuti dot didepan 
    method class induk nya.
    Dibawah ini kita akan melakukan method overriding pada method info() 
    dengan menambahkan informasi jumlah roda pada mobil */
    info(){
        super.info();
        console.log(`Jumlah roda: ${this.wheels}`);
    }
}

/* Dengan begitu selain properti dan method yang terdapat di dalamnya, 
class Car juga dapat mengakses seluruh properti dan method yang terdapat 
pada class Vehicle. */

/* Static Method
Dalam dunia nyata, sebuah kendaraan memerlukan perawatan atau perbaikan apabila
terjadi kerusakan dan perawatan atau perbaikan kendaraan biasanya dilakukan
di bengkel (factory). Maka dari itu, seklanjutnya kita akan membuat bengkel
(class VehicleFactory) dan mengisinya dengan method repair() : 
*/
class VehicleFactory{
    repair(vehicle){
        vehicle.forEach(vehicle=>{
            console.log(`Kendaraan ${vehicle.licensePlate} sedang diperbaiki`);
        });
    }
    
    /* agar method atau fungsi dari class dibawah ini bisa langusng diakses 
    tanpa membuat inheritance, kita bisa menggunakan static method dengan 
    cara menambahkan static keyword sebelum deklarasi method-nya seperti 
    dibawah ini */
    static perbaiki(vehicle){
     vehicle.forEach(vehicle=>{
            console.log(`Kendaraan ${vehicle.licensePlate} sedang diperbaiki`);
        });
    }
}

function br(){
    console.log("");
}

//membuat objek dari class Car
const wulingCar = new Car("Cortez", "Wuling", 4);
const toyotaCar = new Car("Fortuner", "Toyota", 4);

wulingCar.startEngines();
wulingCar.info();
br();
toyotaCar.startEngines();
toyotaCar.info();
/* Seandaa nya kita tidak melakukan method overriding pada method info(),
 maka info yang akan ditampilkan hanya berupa:
 Nomor Kendaraan: Cortez
 Manufacture: Wuling
 Mesin Inactive 
 
 Informasi mengenai jumlah roda tidak ditampilkan*/
 
 // membuat instance untuk mengakses 
 //method repair() dari class VehicleFactory
const vehicleFactory = new VehicleFactory();
br();
vehicleFactory.repair([wulingCar, toyotaCar]);

// memanggil method secara langsung dari class VehicleRepair tanpa membuat 
// inheritance menggunakan static method
br();
VehicleFactory.perbaiki([wulingCar, toyotaCar]);
INFO