Home » Java » Inheritance di Java – Object Oriented (1) :

Inheritance di Java – Object Oriented (1) :

by Bagus Dharma Iswara
by Bagus Dharma Iswara

Pengertian Object Oriented pada Java

OOP adalah singkatan dari Object-Oriented Programming. Pemrograman prosedural adalah tentang menulis prosedur atau metode yang melakukan operasi pada data, sedangkan pemrograman berorientasi objek adalah tentang membuat objek yang berisi data dan metode. Pemrograman berorientasi objek memiliki beberapa keunggulan dibandingkan pemrograman prosedural yaitu

  1. OOP lebih cepat dan lebih mudah dijalankan.
  2. OOP memberikan struktur yang jelas untuk program.
  3. OOP membantu menjaga kode Java tetap DRY (Don’t Repeat Yourself), dan membuat kode lebih mudah untuk dipelihara, dimodifikasi, dan di-debug.
  4. OOP memungkinkan untuk membuat aplikasi penuh yang dapat digunakan kembali dengan kode yang lebih sedikit dan waktu pengembangan yang lebih singkat

Catatn : Prinsip Don’t Repeat Yourself (DRY) adalah tentang mengurangi pengulangan kode. Anda harus mengekstrak kode yang umum untuk aplikasi, dan menempatkannya di satu tempat dan menggunakannya kembali, bukan mengulangnya.

Pada materi sebelumnya kita telah membahas secara lengkap dan sangat jelas mengenai kelas dan objek. Jika teman-teman belum sempat membacanya dapat dibaca kembali pada Tutorial Objek dan Kelas pada Java Plus Source Code. Kali ini kita akan melanjutkan seri Objek Oriented ini dengan menjelaskan secara lengkap mengenai Inheritance.

Pewarisan atau Inheritance dapat didefinisikan sebagai proses di mana satu kelas memperoleh properti (metode dan bidang) dari kelas lain. Dengan menggunakan pewarisan informasi dibuat dapat dikelola dalam urutan hirarki.

Kelas yang mewarisi properti lain dikenal sebagai subclass (kelas turunan, kelas anak) dan kelas yang propertinya diwarisi disebut superclass (kelas dasar, kelas induk). Di Java, dimungkinkan untuk mewarisi atribut dan metode dari satu kelas ke kelas lainnya. Kami mengelompokkan “konsep warisan” menjadi dua kategori yaitu subclass dan superclass.

Extends Keyword

Untuk mewarisi dari sebuah kelas, gunakan kata kunci extends. Pada contoh di bawah ini, class Car (subclass) mewarisi atribut dan metode dari class Vehicle (superclass). dapat kita lihat langsung dengan menuliskan kode berikut

class Vehicle {
  protected String brand = "Ford";        // Vehicle attribute
  public void honk() {                    // Vehicle method
    System.out.println("Tuut, tuut!");
  }
}

class Car extends Vehicle {
  private String modelName = "Mustang";    // Car attribute
  public static void main(String[] args) {

    // Create a myCar object
    Car myCar = new Car();

    // Call the honk() method (from the Vehicle class) on the myCar object
    myCar.honk();

    // Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
    System.out.println(myCar.brand + " " + myCar.modelName);
  }
}

atau kode berikut ini dapat dijadikan sebuah contoh

class Calculation {
   int z;
	
   public void addition(int x, int y) {
      z = x + y;
      System.out.println("The sum of the given numbers:"+z);
   }
	
   public void Subtraction(int x, int y) {
      z = x - y;
      System.out.println("The difference between the given numbers:"+z);
   }
}

public class My_Calculation extends Calculation {
   public void multiplication(int x, int y) {
      z = x * y;
      System.out.println("The product of the given numbers:"+z);
   }
	
   public static void main(String args[]) {
      int a = 20, b = 10;
      My_Calculation demo = new My_Calculation();
      demo.addition(a, b);
      demo.Subtraction(a, b);
      demo.multiplication(a, b);
   }
}

Untuk melihat hasilnya dapat menjalankan kompilasi dan jalankan kode di atas seperti yang ditunjukkan di bawah ini.

javac My_Calculation.java
java My_Calculation

Kemudian setelah mengeksekusi program akan menghasilkan sebagai berikut

The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

Pada program yang diberikan, ketika sebuah objek ke kelas My_Calculation dibuat, salinan dari konten superkelas dibuat di dalamnya. Itulah sebabnya, menggunakan objek subclass Anda dapat mengakses anggota superclass.

Variabel referensi Superclass dapat menampung objek subclass, tetapi dengan menggunakan variabel itu Anda hanya dapat mengakses anggota superclass, jadi untuk mengakses anggota kedua kelas tersebut, disarankan untuk selalu membuat variabel referensi ke subclass tersebut.

Jika Anda mempertimbangkan program di atas, Anda dapat membuat instance kelas seperti yang diberikan di bawah ini.

Tetapi menggunakan variabel referensi superclass (kal dalam kasus ini) Anda tidak dapat memanggil metode multiplication (), yang termasuk dalam subclass My_Calculation dapat dilihat dengan kode dibawah

Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);

Catatan : Subclass mewarisi semua anggota (bidang, metode, dan kelas bersarang) dari superkelasnya. Konstruktor bukan anggota, jadi mereka tidak diwarisi oleh subkelas, tetapi konstruktor superkelas dapat dipanggil dari subkelas tersebut.

Sintaks Dasar Inheritance

Berikut merupakan sintaks dasar untuk membuat sebuah Object Oriented Inheritance pada Java

class Super {
   .....
   .....
}
class Sub extends Super {
   .....
   .....
}

Kata Kunci Super pada Java

Kata kunci super mirip dengan kata kunci this. Berikut adalah skenario di mana kata kunci super digunakan

  1. Ini digunakan untuk membedakan anggota superclass dari anggota subclass, jika mereka memiliki nama yang sama.
  2. Ini digunakan untuk memanggil konstruktor superclass dari subclass.

Membedakan Anggota Superclass dan Subclass

Jika kelas mewarisi properti dari kelas lain. Dan jika anggota superclass memiliki nama yang sama dengan sub class, untuk membedakan variabel ini kita menggunakan kata kunci super seperti yang ditunjukkan di bawah ini

super.variable
super.method();

Contoh kode yang dapat dibuat dan akan memberi kita demonstrasi mengenai penggunaan kata kunci super adalah sebagai berikut

Dalam program yang diberikan, Anda memiliki dua kelas yaitu Sub_class dan Super_class, keduanya memiliki metode bernama display () dengan implementasi berbeda, dan variabel bernama num dengan nilai berbeda. Kami menjalankan metode display () dari kedua kelas dan mencetak nilai dari variabel num dari kedua kelas. Di sini Anda dapat mengamati bahwa kami telah menggunakan kata kunci super untuk membedakan anggota superclass dari subclass.

Kita dapat membuat dan menuliskan kode berikut dengan nama Sub_class.java

class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Kita dapat mengkompilasi dan mengeksekusi kode diatas dengan sintaks berikut

javac Super_Demo
java Super

Kemudian akan dapat menghasilkan output seperti ini

This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

Memanggil Constructor Superclass

Jika sebuah kelas mewarisi properti kelas lain, subkelas tersebut secara otomatis memperoleh konstruktor default dari kelas super tersebut. Tetapi jika Anda ingin memanggil konstruktor berparameter dari superclass, Anda perlu menggunakan kata kunci super seperti yang ditunjukkan pada kode super(values);

Contoh kode yang dapat dibuat dan akan memberi kita demonstrasi mengenai penggunaan cara memanggil constructor superclass adalah sebagai berikut

Program yang diberikan di bagian ini menunjukkan bagaimana menggunakan kata kunci super untuk memanggil konstruktor parametrized dari superclass. Program ini berisi superclass dan subclass, di mana superclass tersebut berisi konstruktor berparameter yang menerima nilai integer, dan kami menggunakan kata kunci super untuk memanggil konstruktor berparameter dari superclass tersebut.

Kita dapat membuat dan menuliskan kode berikut dengan nama Subclass.java

class Superclass {
   int age;

   Superclass(int age) {
      this.age = age; 		 
   }

   public void getAge() {
      System.out.println("The value of the variable named age in super class is: " +age);
   }
}

public class Subclass extends Superclass {
   Subclass(int age) {
      super(age);
   }

   public static void main(String args[]) {
      Subclass s = new Subclass(24);
      s.getAge();
   }
}

Kita dapat mengkompilasi dan mengeksekusi kode diatas dengan sintaks berikut

javac Subclass
java Subclass

Kemudian akan dapat menghasilkan output seperti ini

The value of the variable named age in super class is: 24

Hubungan IS-A pada Java

IS-A adalah cara untuk mengatakan: Objek ini adalah tipe dari objek itu. Mari kita lihat bagaimana kata kunci extends digunakan untuk mencapai pewarisan. Kita dapat lihat dengan menuliskan kode berikut pada java

public class Animal {
}

public class Mammal extends Animal {
}

public class Reptile extends Animal {
}

public class Dog extends Mammal {
}

Sekarang, berdasarkan contoh di atas, dalam istilah Object Oriented, maka pernyataan berikut ini adalah benar yaitu

  1. Animal adalah superclass dari kelas Mammal.
  2. Animal adalah superclass dari kelas Reptile.
  3. Mammal dan Reptile adalah subclass dari kelas Animal.
  4. Dog adalah subclass dari kedua kelas Mammal dan Animal.

Sekarang dengan menggunakan metode hubungan IS-A kita dapatkan sebagai berikut

  1. Mammal IS-A Animal.
  2. Reptile IS-A Animal.
  3. Dog IS-A Mammal
  4. Karenanya: Dog IS-A Animal juga

Dengan menggunakan kata kunci extends, subclass akan dapat mewarisi semua properti superclass kecuali properti privat superclass tersebut. Kami dapat memastikan bahwa Mamalia sebenarnya adalah Hewan dengan menggunakan operator instans. Kita dapat menuliskan kode berikut sebagai contoh

class Animal {
}

class Mammal extends Animal {
}

class Reptile extends Animal {
}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Selanjutnya setelah dijalankan maka akan menghasilkan output

true
true
true

Karena kita memiliki pemahaman yang baik tentang kata kunci extends, mari kita lihat bagaimana kata kunci implement digunakan untuk mendapatkan hubungan IS-A. Secara umum, kata kunci implement digunakan dengan kelas-kelas untuk mewarisi properti antarmuka. Interfaces tidak pernah bisa diperluas oleh kelas. Kemudian contoh sederhananya adalah

public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

Kata Kunci Instance Of

Mari kita gunakan operator instanceof untuk memeriksa apakah Mamalia sebenarnya adalah Hewan, dan anjing sebenarnya adalah Hewan. Maka kita dapat menuliskan kode berikut sebagai contoh

interface Animal{}
class Mammal implements Animal{}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Yang akan mengeluarkan hasil

true
true
true

Hubungan HAS-A

Hubungan ini terutama didasarkan pada penggunaan. Ini menentukan apakah kelas tertentu HAS-A pada hal tertentu. Hubungan ini membantu mengurangi duplikasi kode serta bug yang ada pada program java. Kita dapat melihat contoh kode berikut

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
} 

Ini menunjukkan bahwa kelas Van HAS-A Speed. Dengan memiliki kelas terpisah untuk Kecepatan, kita tidak perlu memasukkan seluruh kode yang termasuk dalam kelas Kecepatan di dalam kelas Van, yang memungkinkan untuk menggunakan kembali kelas Kecepatan dalam banyak aplikasi.

Pada fitur Object Oriented, pengguna tidak perlu pusing memikirkan objek mana yang melakukan pekerjaan sebenarnya. Untuk mencapai ini, kelas Van menyembunyikan detail implementasi dari pengguna kelas Van. Jadi, pada dasarnya apa yang terjadi adalah pengguna akan meminta kelas Van untuk melakukan tindakan tertentu dan kelas Van akan melakukan pekerjaan itu sendiri atau meminta kelas lain untuk melakukan tindakan tersebut.

Tipe Inheritance

Pada pemrograman bahasa Java. terdapat beberapa jenis dari inheritance dengan pembagian sebagai berikut

Single Inheritance

contoh kode program single inheritance adalah

public class A {
    .......
}
public class B extends A {
     ......
}

Multi Level Inheritance

contoh kode program multi level inheritance adalah

public class A { ......... }
public class B extends A { ......... }
public class C extends B { ......... }

Hierarchical Inheritance

contoh kode program hierarchical inheritance adalah

public class A { ......... }
public class B extends A { ......... }
public class C extends A { ......... }

Multiple Inheritance

contoh kode program multiple inheritance adalah

public class A { ......... }
public class B { ......... }
public class C extends A,B { ......... } // perlu diingat disini bahwa java tidak support pada jenis inheritance ini

Fakta yang sangat penting untuk diingat adalah bahwa Java tidak mendukung multiple inheritance. Ini berarti bahwa sebuah kelas tidak dapat memperluas lebih dari satu kelas. Oleh karena itu, mengikuti aturan ini adalah ilegal atau tidak dibenarkan menggunakannya pada pemrograman java. contohnya adalah

public class extends Animal, Mammal{} 

You may also like