OOP Praktis – Inheritance (Java)

Teknik berikutnya dalam paradigma pemrograman berorientasi objek adalah inheritance atau pewarisan.

Inheritance, sesuai dengan namanya mengenalkan hubungan hirarkis antara parent class (induk) dan child class (anak), dimana child class dapat mewarisi fields dan methods yang dimiliki oleh parent class.

cat: Parent class dikenal juga dengan istilah superclass, child class dikenal juga dengan istilah subclass

Dengan menggunakan inheritance, kita mendapatkan mendapatkan manfaat berupa dimungkinkannya code reuse (kode tidak perlu ditulis ulang) dan tersedianya informasi struktur klasifikasi hierarkis antar class.

Konsep

Untuk memahami konsep inheritance dengan lebih jelas, perhatikan ilustrasi berikut.

Ilustrasi di atas adalah ilustrasi beberapa class yang digunakan untuk merepresentasikan produk komponen komputer yang dijual pada sebuah toko komputer (disederhanakan).

Seluruh produk komponen yang dijual, apapun jenisnya, memiliki beberapa informasi yang seragam yakni : nama produk, pabrikan(merk), dan harga. Informasi yang seragam ini kemudian dijadikan fields untuk membuat sebuah struktur sebuah parent class yakni ComputerParts.

Informasi yang secara unik melekat pada suatu tipe komponen tertentu kemudian dijadikan fields pada masing-masing child class yang merepresentasikan satu kelompok tipe komponen bersangkutan. Pada ilustrasi, child class yang ada antara lain Processor, Random Access Memory (RAM), dan Harddisk bertipe SATA. Masing-masing child class tersebut memiliki karakteristik berbeda yang diperlihatkan dari field yang menyusunnya.

Kode program

Jika disusun dalam kode, maka masing-masing class akan memiliki kode sebagai berikut:

Superclass (ComputerPart)

public class ComputerPart{
  private String pabrikan;
  private String nama;
  private String jenis;
  private double harga;
  
  public ComputerPart(String pabrikan,String nama,String jenis, double harga){
    this.pabrikan = pabrikan;
    this.nama = nama;
    this.jenis = jenis;
    this.harga = harga;
  }

  public String getPabrikan(){
    return this.pabrikan;
  }

  public String getNama(){
    return this.nama;
  }

  public String getJenis(){
    return this.jenis;
  }

  public double getHarga(){
    return this.harga;
  }

  public void setPabrikan(String pabrikan){
    this.pabrikan = pabrikan;
  }

  public void setNama(String nama){
    this.nama = nama;
  }

  public void setJenis(String jenis){
    this.jenis = jenis;
  }

  public void setHarga(double harga){
    this.harga = harga;
  }
  
}

Subclass (Processor)

public class Processor extends ComputerPart{
  private int jumlahCore;
  private String speed;

  public Processor(String pabrikan,String nama, double harga,int core, String speed){
    super(pabrikan,nama,"Processor",harga);
    this.jumlahCore = core;
    this.speed = speed;
  }

  public int getJumlahCore(){
    return this.jumlahCore;
  }

  public String getSpeed(){
    return this.speed;
  }

  public void setJumlahCore(int core){
    this.jumlahCore = core;
  }

  public void setSpeed(String speed){
    this.speed = speed;
  }

}

Subclass (RandomAccessMemory)

public class RandomAccessMemory extends ComputerPart{
  private String kapasitas;
  
  public RandomAccessMemory(String pabrikan,String nama, double harga,String kapasitas){
    super(pabrikan,nama,"RAM",harga);
    this.kapasitas = kapasitas;    
  }

  public String getKapasitas(){
    return kapasitas;
  }

  public void setKapasitas(String kapasitas){
    this.kapasitas = kapasitas;
  }
}

Kode untuk superclass

Pada kode di atas diperlihatkan struktur class ComputerPart lengkap dengan fields, constructor, serta getter dan setter untuk masing-masing fields.

Kode untuk subclass

Pada masing-masing subclass (Processor dan RandomAccessMemory), deklarasi dilengkapi dengan kata kunci extends yang diikuti dengan ComputerPart. Bagian inilah yang berfungsi menandai ComputerPart sebagai superclass dari kedua class tersebut. Pada setiap constructor setiap child class terdapat baris yang memanggil constructor superclass dengan kata kunci super() lengkap dengan argumen yang dibutuhkan.

Catatan: masih ada satu subclass lagi yakni HarddiskSATA, coba berlatih menyusun sendiri kodenya berdasarkan dua contoh yang ada.

Makna relasi inheritance

Implikasi dari relasi superclasssubclass di atas adalah sebagai berikut:

  1. Setiap object baik yang dibentuk dari class Processor maupun RandomAccessMemory adalah juga instance dari class ComputerPart.
  2. Public/protected fields/method dari ComputerPart (superclass), diwarisi oleh Processor dan RandomAccessMemory. Ini berarti bahwa setiap object dari kedua subclass tersebut memiliki method warisan berupa getter dan setter untuk setiap field.

Kode lengkap

Perhatikan kode pada method main berikut ini, kemudian jalankan programnya.

Baris 3,4,5 adalah deklarasi dan instansiasi object dari subclass.

Baris 7 adalah inisialisasi array bertipe ComputerPart yang dibentuk dari ketiga object.

Baris 8,9,10 melakukan loop pada array kemudian menampikan nama produk dan pabrikannya satu persatu.

Sekian, semoga bermanfaat

Salam

Series Navigation<< OOP Praktis – Encapsulation (Java)

You may also like...

Berikan komentar