Belajar Pemrograman Java Dari Dasar

Dasar Konsep Inheritance Pada Java Yang Perlu Diketahui

Setelah sebelumnya anda mengetahui mengenai apa itu inheritance, sebagai salah satu konsep Java, tujuan dari inheritance ini adalah untuk menambahkan fungsionalitas dari class yang sudah ada.

Inheritance merupakan pilihan yang baik ketika:

  • Hirarki class menunjukan hubungan IS-A dan bukan hubungan HAS-A

  • Memerlukan menggunakan kembali kode dari class dasar.

  • Memerlukan untuk menerapkan class dan method-method yang sama pada berbagai tipe data yang berbeda

  • Hirarki class tidak terlalu dalam dan tidak banyak penambahan level lagi.

  • Memerlukan untuk melakukan perubahan secara global pada class turunan dengan mengubah class dasar.

Inheritance diimplementasikan dengan menggunakan keyword extends, misalnya seperti di bawah ini:

Class X
public class X {
 
 int a;
 void method_Satu(){
  
 }

}

Class X di atas memiliki dua anggota yaitu a dan juga method_Satu().

Class Y
public class Y extends X {
 
 int b;
 void method_Dua(){
  
 }

}

Class Y di atas memiliki dua anggota juga yaitu b dan method_Dua().

Pengertian dari class Y extends X adalah anggota dari class X diwariskan pada class Y. Jadi sekarang class Y selain memiliki dua anggota juga akan mendapatkan tambahan dua anggota lain yang diwariskan atau inherit dari class X.

Untuk lebih jelasnya lihat gambar di bawah:

inheritance_Java

Beberapa Hal Yang Perlu Diingat Pada Inheritance

Ada beberapa hal yang perlu diketahui dalam konsep inheritance pada pemrograman Java, diantaranya adalah:

1) Constructor, Blok Inisialisasi Static dan Blok Inisialisasi Instance dari superclass tidak akan di wariskan pada subclass. Namun, mereka akan dieksekusi ketika subclass membuat objek.

Class X
public class X {
 
 int a;
 
 static{
  System.out.println("Blok Inisialisasi Static class X");
 }
 
 {
 System.out.println("Blok Inisialisasi Instance class X");
 }
 
 X(){
  System.out.println("Constructor dari class X");
 }

}

Class Y
public class Y extends X {
 
 int b;

}

Class Test
public class Test {
 
 public static void main(String[] args) {
  
  Y y = new Y();
  
 }

}

Output:
Blok Inisialisasi Static class X
Blok Inisialisasi Instance class X
Constructor dari class X
2) Anggota static dari superclass akan diwariskan pada subclass sebagai anggota static demikian pula dengan anggota non-static hanya akan diwariskan sebagai anggota non-static.

3) Jika anda menuliskan kode program:

Class X
public class X {
 
 int a;
 
 X(int a)
    {
        System.out.println("Constructor dari class X");
    }
}


Class Y
public class Y extends X {
 
 int b;

}

Maka compile time error akan terjadi, misal:

Implicit super constructor X() is undefined for default constructor. Must define an explicit constructor

Di sini compiler akan memaksa anda untuk menulis constructor di class Y. Karena anda tidak mendefinisikan constructor untuk class Y. Jadi compiler akan menyediakan constructor default.

Untuk menghindari error ini, anda dapat menggunakan super() untuk memanggil pernyataan constructor pada class X. Namun, ketika  langsung menerapkan super() pada class Y, maka compile time error masih tetap akan terjadi.

Oleh karena itu, anda harus menulis konstruktor pada subclass dalam hal ini class Y, baru kemudian di dalam konstruktor tersebut anda dapat memanggil constructor superclass dalam hal ini class X secara eksplisit.

Seperti contoh di bawah ini:

Class X
public class X {
 
 int a;
 
 X(int a)
    {
        System.out.println("Constructor dari class X");
    }
}

Class Y
public class Y extends X {
 
 int b;
 
 Y(){
  /**
  Memanggil constructor class X secara eksplisit
  */
  super(100);
  System.out.println("Constructor dari class Y");
 }
 
}


4) Secara default semua class termasuk class yang anda buat adalah merupakan subclass dari class Object atau java.lang.Object.

5) Anda dapat memanggil constructor dari superclass secara eksplisit melalui pernyataan super() dari constructor subclass. Selain itu anda juga dapat memanggil constructor lain pada class yang sama melalui pernyataan this(), namun anda tidak bisa memanggil constructor subclass melalui constructor superclass.

6) Pengaruh dari access modifier

Berikut ini adalah beberapa pengaruh dari acces modifier pada inheritance:
  • private: anggota private tidak bisa diwariskan pada subclass.

  • default : anggota default bisa diwariskan pada subclass di dalam package yang sama

  • protected: anggota protected dapat diwariskan pada subclass manapun, meskipun berada diluar package superclass. Anggota protected hanya dapat diakses di luar package melalui inheritance saja.

  • public: anggota public dapat diwariskan pada seluruh subclass

Share on Facebook
Share on Twitter
Share on Google+

Artikel Menarik Lainnya :