Java - Warisan

Pewarisan dapat didefinisikan sebagai proses di mana satu kelas memperoleh properti (metode dan bidang) dari kelas lain. Dengan penggunaan warisan, informasi dibuat dapat dikelola dalam urutan hierarki.

Kelas yang mewarisi properti lain dikenal sebagai subclass (kelas turunan, kelas anak) dan kelas yang propertinya diwarisi disebut superclass (kelas dasar, kelas induk).

memperluas Kata Kunci

extendsadalah kata kunci yang digunakan untuk mewarisi properti kelas. Berikut ini adalah sintaks kata kunci extends.

Syntax

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

Kode sampel

Berikut adalah contoh yang mendemonstrasikan pewarisan Java. Dalam contoh ini, Anda dapat mengamati dua kelas yaitu Perhitungan dan Perhitungan_saya.

Menggunakan kata kunci extends, My_Calculation mewarisi metode penjumlahan () dan Pengurangan () dari kelas Perhitungan.

Salin dan tempel program berikut dalam file dengan nama My_Calculation.java

Example

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);
   }
}

Kompilasi dan jalankan kode di atas seperti yang ditunjukkan di bawah ini.

javac My_Calculation.java
java My_Calculation

Setelah menjalankan program, itu akan menghasilkan hasil sebagai berikut -

Output

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

Dalam program yang diberikan, saat objek untuk My_Calculationkelas dibuat, salinan konten superclass dibuat di dalamnya. Itulah sebabnya, dengan menggunakan objek subclass Anda dapat mengakses anggota superclass.

Variabel referensi Superclass dapat menampung objek subclass, tetapi 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 (cal dalam hal ini) Anda tidak dapat memanggil metode tersebut multiplication(), yang termasuk dalam subclass My_Calculation.

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

Note- Subclass mewarisi semua anggota (bidang, metode, dan kelas bersarang) dari superkelasnya. Konstruktor bukan anggota, jadi mereka tidak diwarisi oleh subclass, tetapi konstruktor superclass dapat dipanggil dari subclass tersebut.

Kata kunci super

Itu super kata kunci mirip dengan thiskata kunci. Berikut adalah skenario di mana kata kunci super digunakan.

  • Itu sudah biasa differentiate the members superclass dari anggota subclass, jika mereka memiliki nama yang sama.

  • Itu sudah biasa invoke the superclass konstruktor dari subclass.

Membedakan Anggota

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

super.variable
super.method();

Kode sampel

Bagian ini memberi Anda program yang mendemonstrasikan penggunaan file super kata kunci.

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 memanggil 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.

Salin dan tempel program dalam file dengan nama Sub_class.java.

Example

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();
   }
}

Kompilasi dan jalankan kode di atas menggunakan sintaks berikut.

javac Super_Demo
java Super

Saat menjalankan program, Anda akan mendapatkan hasil sebagai berikut -

Output

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 Superclass Constructor

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 di bawah ini.

super(values);

Kode sampel

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.

Salin dan tempel program berikut dalam file dengan nama Subclass.java

Example

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();
   }
}

Kompilasi dan jalankan kode di atas menggunakan sintaks berikut.

javac Subclass
java Subclass

Saat menjalankan program, Anda akan mendapatkan hasil sebagai berikut -

Output

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

Hubungan IS-A

IS-A adalah cara untuk mengatakan: Objek ini adalah tipe dari objek itu. Mari kita lihat bagaimanaextends kata kunci digunakan untuk mencapai warisan.

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 Berorientasi Objek, berikut ini benar -

  • Hewan adalah kelas super dari kelas Mamalia.
  • Hewan adalah superclass dari kelas Reptil.
  • Mamalia dan Reptil adalah subclass dari kelas Hewan.
  • Anjing adalah subkelas dari kelas Mamalia dan Hewan.

Sekarang, jika kita mempertimbangkan hubungan IS-A, kita dapat mengatakan -

  • Mamalia IS-A Hewan
  • Reptil IS-A Hewan
  • Anjing IS-A Mamalia
  • Karenanya: Anjing IS-A Hewan 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.

Example

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);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true
true
true

Karena kami memiliki pemahaman yang baik tentang file extends kata kunci, mari kita lihat bagaimana implements kata kunci digunakan untuk mendapatkan hubungan IS-A.

Umumnya, file implementskata kunci digunakan dengan kelas untuk mewarisi properti dari sebuah antarmuka. Antarmuka tidak pernah bisa diperluas oleh kelas.

Example

public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

Contoh Kata Kunci

Mari kita gunakan instanceof operator untuk memeriksa menentukan apakah Mamalia sebenarnya adalah Hewan, dan anjing sebenarnya adalah Hewan.

Example

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);
   }
}

Ini akan menghasilkan hasil sebagai berikut -

Output

true
true
true

Hubungan HAS-A

Hubungan ini terutama didasarkan pada penggunaan. Ini menentukan apakah kelas tertentuHAS-Ahal tertentu. Hubungan ini membantu mengurangi duplikasi kode serta bug.

Mari kita lihat contoh -

Example

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
}

Hal 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.

Jenis Warisan

Ada berbagai jenis warisan seperti yang ditunjukkan di bawah 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 adalah ilegal -

Example

public class extends Animal, Mammal{}

Namun, sebuah kelas dapat mengimplementasikan satu atau lebih antarmuka, yang telah membantu Java menyingkirkan kemustahilan warisan berganda.