Belajar Memahami Konsep Inheritance Pada Java

Apa Itu Inheritance dan Mengapa Penting Dipahami Dalam Belajar Java?

Dalam belajar Java untuk pemula, memahami Inheritance adalah hal yang sangat penting. Inheritance merupakan salah satu dari 4 konsep dari pemrograman Java yang fundamental selain dari Encapsulation, Polymorphism dan  Abstraction.

Inheritance bersifat krusial karena memiliki efek langsung pada bagaimana anda mendesain class-class.

Konsep ini sebenarnya memiliki tujuan yaitu ketika anda membuat suatu class maka anda hanya perlu menspesifikasikan apa yang menjadi perbedaan antara suatu class dengan class lainnya, kemudian secara otomatis inheritance ini akan memberikan akses otomatis terhadap informasi yang terkandung dari class lainnya.

Keyword untuk inheritance atau pewarisan adalah extends.

Class yang mewariskan disebut dengan superclass dan class yang menerima pewarisan disebut dengan subclass.

belajar_java_inheritance_dari_dasar


Class Object Sebagai Superclass Tertinggi

Pada posisi top markotop level puncak class pada Java ditempati oleh class Object, nama lengkapnya java.lang.Object, yang merupakan superclass dari semua class yang ada pada Java, baik itu class yang ada pada Java library maupun pada class yang anda buat.

Mungkin anda tidak menyadari, jadi sebenarnya ketika anda membuat class misalnya:

public class Buah {

}

class Buah tersebut inherit dari class Object. Namun tidak secara eksplisit dituliskan. Jika ingin menuliskan bisa saja dengan:

public class Buah extends Object{

}


Terus apa buktinya kalau class Buah inherit dari class Object?

Lihat contoh kode program simpel di bawah ini:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.bahasaJava.inheritance;

public class Buah {
 
 public static void main (String args []){
  
  Buah buah = new Buah();
  
  //Karena class buah inherit dari class objek
  //Maka class buah bisa menggunakan method dari class Objek
  
  //Method getClass() adalah milik class objek
  System.out.println(buah.getClass());
  
  //Method hashCode() adalah milik class objek
  System.out.println(buah.hashCode());
  
  //Method toString() adalah milik class objek
  System.out.println(buah.toString());
  
  
 }

}

Salah satu buktinya adalah class Buah bisa menggunakan method dari class Objek.

Bagaimana Inheritance Bekerja?

Jika anda akan menggunakan inheritance pada class anda, maka ujilah dengan menggunakan hubungan IS-A atau ADALAH-SUATU.

Contohnya :

class Harimau inherit dari class Karnivora, maka Harimau adalah suatu Karnivora, ya ini logis. Namun jika
class Ayam inherit dari class Karnivora, apakah Ayam adalah suatu Karnivora? Tentu saja bukan.

Ok, sekarang lihat hirarki dari class JFrame yang juga menggunakan konsep inheritance misalnya:

java.lang.Object  
           java.awt.Component 
                    java.awt.Container 
                          java.awt.Window 
                                       java.awt.Frame 
                                                   javax.swing.JFrame


Suatu subclass yang menerima pewarisan dari superclass-nya akan bisa menggunakan field-field serta method-method dari superclass-nya, selama acces modifiernya memenuhi syarat untuk itu.

Lihat contoh program di bawah ini untuk lebih jelasnya:

class Karnivora sebagai superclass.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package com.bahasaJava.inheritance;

public class Karnivora {
 
 private double berat;
 private String makanan, nama, jenis, lokasi;
 
 
 //Method getter dan setter untuk berat
 public double getBerat() {
  return berat;
 }

 public void setBerat(double berat) {
  this.berat = berat;
 }
 
 
 //Method getter dan setter untuk makanan
 public String getMakanan() {
  return makanan;
 }

 public void setMakanan(String makanan) {
  this.makanan = makanan;
 }

 //Method getter dan setter untuk nama
 public String getNama() {
  return nama;
 }
 public void setNama(String nama) {
  this.nama = nama;
 }

 //Method getter dan setter untuk jenis
 public String getJenis() {
  return jenis;
 }

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

 //Method getter dan setter untuk lokasi
 public String getLokasi() {
  return lokasi;
 }

 public void setLokasi(String lokasi) {
  this.lokasi = lokasi;
 }
 
 
 //Method untuk menampilkan detail karnivora
 public void tampilkanDetail(){
  System.out.println("Nama : "  + getNama());
  System.out.println("Berat : " + getBerat() + " Kg");
  System.out.println("Makanan : " + getMakanan());
  System.out.println("Jenis : " + getJenis());
  System.out.println("Lokasi : "+ getLokasi());
  System.out.println();
 }

}

class Harimau inherit dari class Karnivora :

1
2
3
4
5
6
7
8
9
package com.bahasaJava.inheritance;

public class Harimau extends Karnivora {
 
 public Harimau(){
  System.out.println("Ini adalah detail hewan Karnivora: Harimau");
 }
 
}

class Anjing inherit dari class Karnivora :


1
2
3
4
5
6
7
8
9
package com.bahasaJava.inheritance;

public class Anjing extends Karnivora {
 
 public Anjing(){
  System.out.println("Ini adalah detail hewan Karnivora: Anjing");
 }
 
}

class Demo untuk mendemonstrasikan inheritance :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.bahasaJava.inheritance;

public class Demo {
 
 public static void main(String args []){
  
  Harimau harimau = new Harimau();
  harimau.setNama("Harimau Sumatera");
  harimau.setBerat(108.25);
  harimau.setJenis("Jantan");
  harimau.setMakanan("Daging");
  harimau.setLokasi("Sumatera, Indonesia");
  harimau.tampilkanDetail();
  
  Anjing anjing = new Anjing();
  anjing.setNama("Anjing Dalmatian");
  anjing.setBerat(20.65);
  anjing.setJenis("Betina");
  anjing.setMakanan("Daging");
  anjing.setLokasi("Kroasia");
  anjing.tampilkanDetail();
  
 }

}

Output:
Ini adalah detail hewan Karnivora: Harimau
Nama : Harimau Sumatera
Berat : 108.25 Kg
Makanan : Daging
Jenis : Jantan
Lokasi : Sumatera, Indonesia

Ini adalah detail hewan Karnivora: Anjing
Nama : Anjing Dalmatian
Berat : 20.65 Kg
Makanan : Daging
Jenis : Betina
Lokasi : Kroasia

Apakah Multiple Inheritance Diperbolehkan Pada Java?

Java tidak mengizinkan multiple inheritance.

Untuk lebih jelasnya lihat gambar di bawah ini :

java_multiple_inheritance_deadly_diamond_of_death
Multiple Inheritance tidak diperbolehkan dalam Java

Keterangan :
  • class A adalah super class
  • class B dan C adalah subclass dari class A
  • class D adalah subclass dari class B dan C
Bila kita lihat gambar tersebut berbentuk diamond. Dalam Java dikenal dengan istilah menyeramkan yaitu Deadly Diamond of Death.

Kira-kira masalah apa yang terjadi setelah melihat gambar di atas?

Misalkan class A memiliki method, kemudian method tersebut di overriding oleh class B dan class C .
Masalah yang terjadi adalah ketika kita membuat objek atau instantiate objek dari class D.

Karena class D merupakan inherit dari class B dan C, maka ketika D ingin menggunakan method yang sama, method mana yang akan dipanggil? Apakah method yang sudah di-overriding oleh class B ataukah method yang sudah di-overriding oleh class C? Tentunya menjadi hal yang tidak jelas atau ambigu. Atas dasar inilah, maka Java tidak mengizinkan multiple inheritance.

Terus bagaimana Java mengatasi hal ini?
Java mengatasinya dengan membuat class yang 100% persen abstract, atau dikenal dengan interface, tapi ini bukan interface yang ada pada GUI, melainkan keyword Java interface. 

Dengan interface, masalah pada Deadly Diamond of Death (DDD) diatasi dengan membuat semua method menjadi abstract, karena method abstract harus diimplementasikan oleh subclass pertama yang kongkrit.

Subclass harus mengimplementasikan method-method tersebut, sehingga saat runtime Java Virtual Machine (JVM) tidak 'dipusingkan' mengenai method mana dari dua versi inherit yang harus dipanggil.

Keuntungan Dari Konsep Dari Inheritance 

Keuntungan dari penggunaan inheritance adalah menghindari penggunaan kode yang sama atau duplikat pada subclass. Lho kok bisa? 

Tentu saja bisa, karena seperti dijelaskan di atas, subclass bisa menggunakan method yang dimiliki oleh superclass, atau istilahnya pada Java dikenal dengan Overriding method.

Bagaimana efeknya dalam koding?

Tentunya efeknya akan mengurangi jumlah kode pemrograman, dan proses koding akan lebih clear dan mudah dipahami. Konsep inheritance mempermudah para programmer untuk perluasan suatu objek tanpa harus membuat fungsi baru.


No comments

Bahasa Java. Powered by Blogger.