Menguasai Warisan Java: Prinsip Subkelas dan Superkelas
Warisan dapat didefinisikan sebagai proses di mana satu kelas memperoleh properti (metode dan bidang) dari kelas lain. Dengan penggunaan warisan, informasi menjadi dapat diatur dalam urutan hierarkis.
Kelas yang mewarisi properti dari kelas lain dikenal sebagai subclass (kelas turunan, kelas anak) dan kelas yang propertinya diwarisi dikenal sebagai superkelas (kelas dasar, kelas induk).
Kata Kunci extends
extends adalah kata kunci yang digunakan untuk mewarisi properti dari sebuah kelas. Berikut adalah sintaks kata kunci extends.
Sintaks
class Super { ..... ..... } class Sub extends Super { ..... ..... } Kode Contoh
Berikut adalah contoh yang menunjukkan warisan Java. Dalam contoh ini, Anda dapat mengamati dua kelas yaitu Calculation dan My_Calculation.
Dengan menggunakan kata kunci extends, My_Calculation mewarisi metode addition() dan Subtraction() dari kelas Calculation.
Salin dan tempel program berikut ke dalam file dengan nama My_Calculation.java
Contoh
Live Demo
class Calculation { int z; public void addition(int x, int y) { z = x + y; System.out.println("Jumlah angka yang diberikan:"+z); } public void Subtraction(int x, int y) { z = x - y; System.out.println("Selisih antara angka yang diberikan:"+z); } } public class My_Calculation extends Calculation { public void multiplication(int x, int y) { z = x * y; System.out.println("Hasil kali angka yang diberikan:"+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, ini akan menghasilkan hasil berikut:
Keluaran
Jumlah angka yang diberikan:30 Selisih antara angka yang diberikan:10 Hasil kali angka yang diberikan:200
Dalam program yang diberikan, ketika objek untuk kelas My_Calculation dibuat, salinan isi superkelas dibuat di dalamnya. Itulah sebabnya, menggunakan objek subclass Anda dapat mengakses anggota superkelas.
Variabel referensi superkelas dapat menahan objek subclass, tetapi menggunakan variabel tersebut Anda hanya dapat mengakses anggota superkelas, jadi untuk mengakses anggota kedua kelas disarankan untuk selalu membuat variabel referensi ke subclass.
Jika Anda mempertimbangkan program di atas, Anda dapat membuat instance kelas seperti yang ditunjukkan di bawah ini. Namun menggunakan variabel referensi superkelas ( cal dalam hal ini) Anda tidak dapat memanggil metode multiplication(), yang termasuk dalam subclass My_Calculation.
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 subclass, tetapi konstruktor superkelas dapat dipanggil dari subclass.
Kata Kunci super
Kata kunci super mirip dengan kata kunci this. Berikut adalah skenario di mana kata kunci super digunakan.
Digunakan untuk membedakan anggota superkelas dari anggota subclass, jika mereka memiliki nama yang sama.
Digunakan untuk memanggil konstruktor superkelas dari subclass.
Membedakan Anggota
Jika sebuah kelas mewarisi properti dari kelas lain. Dan jika anggota superkelas memiliki nama yang sama dengan subclass, untuk membedakan variabel ini kita menggunakan kata kunci super seperti yang ditunjukkan di bawah ini.
super.variabel super.method();
Kode Contoh
Bagian ini memberikan program yang menunjukkan penggunaan kata kunci super.
Dalam program yang diberikan, Anda memiliki dua kelas yaitu Sub_class dan Super_class, keduanya memiliki metode bernama display() dengan implementasi yang berbeda, dan variabel bernama num dengan nilai yang berbeda. Kita memanggil metode display() dari kedua kelas dan mencetak nilai variabel num dari kedua kelas. Di sini Anda dapat melihat bahwa kita telah menggunakan kata kunci super untuk membedakan anggota superkelas dari subclass.
Salin dan tempel program ke dalam file dengan nama Sub_class.java.
Contoh
Live Demo
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
Pada menjalankan program, Anda akan mendapatkan hasil berikut:
Keluaran
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 Konstruktor Superkelas
Jika sebuah kelas mewarisi properti dari kelas lain, subclass secara otomatis memperoleh konstruktor default superkelas. Namun jika Anda ingin memanggil konstruktor berparameter superkelas, Anda perlu menggunakan kata kunci super seperti yang ditunjukkan di bawah ini.
super(nilai);
Kode Contoh
Program yang diberikan dalam bagian ini menunjukkan cara menggunakan kata kunci super untuk memanggil konstruktor berparameter superkelas. Program ini berisi superkelas dan subclass, di mana superkelas berisi konstruktor berparameter yang menerima nilai integer, dan kita menggunakan kata kunci super untuk memanggil konstruktor berparameter superkelas.
Salin dan tempel program berikut ke dalam file dengan nama Subclass.java
Contoh
Live Demo
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
Pada menjalankan program, Anda akan mendapatkan hasil berikut:
Keluaran
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 bagaimana kata kunci extends 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, hal-hal berikut benar:
- Animal adalah superkelas dari kelas Mammal.
- Animal adalah superkelas dari kelas Reptile.
- Mammal dan Reptile adalah subclass dari kelas Animal.
- Dog adalah subclass dari kelas Mammal dan Animal.
Sekarang, jika kita mempertimbangkan hubungan IS-A, kita dapat mengatakan:
- Mammal IS-A Animal
- Reptile IS-A Animal
- Dog IS-A Mammal
- Oleh karena itu: Dog IS-A Animal juga
Dengan menggunakan kata kunci extends, subclass akan dapat mewarisi semua properti superkelas kecuali properti private superkelas.
Kita dapat memastikan bahwa Mammal sebenarnya adalah Animal dengan menggunakan operator instance.
Contoh
Live Demo
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 berikut:
Keluaran
true true true
Sejak kita memiliki pemahaman yang baik tentang kata kunci extends, mari kita lihat bagaimana kata kunci implements digunakan untuk mendapatkan hubungan IS-A.
Secara umum, kata kunci implements digunakan dengan kelas untuk mewarisi properti dari sebuah antarmuka. Antarmuka tidak pernah dapat diperluas oleh kelas.
Contoh
public interface Animal { } public class Mammal implements Animal { } public class Dog extends Mammal { } Kata Kunci instanceof
Mari kita gunakan operator instanceof untuk memeriksa apakah Mammal sebenarnya adalah Animal, dan dog sebenarnya adalah Animal.
Contoh
Live Demo
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 berikut:
Keluaran
true true true
Hubungan HAS-A
Hubungan ini terutama berdasarkan penggunaan. Ini menentukan apakah suatu kelas MEMILIKI sesuatu yang tertentu. Hubungan ini membantu mengurangi duplikasi kode serta bug.
Mari kita lihat contoh berikut:
Contoh
public class Vehicle{} public class Speed{} public class Van extends Vehicle { private Speed sp; } Ini menunjukkan bahwa kelas Van MEMILIKI Speed. Dengan memiliki kelas terpisah untuk Speed, kita tidak perlu menempatkan seluruh kode yang terkait dengan speed di dalam kelas Van, yang memungkinkan kelas Speed digunakan kembali dalam beberapa aplikasi.
Dalam fitur Berorientasi Objek, pengguna tidak perlu repot-repot tentang objek mana yang melakukan pekerjaan nyata. Untuk mencapai ini, kelas Van menyembunyikan detail implementasi dari pengguna kelas Van. Jadi, 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.
Satu fakta yang sangat penting untuk diingat adalah Java tidak mendukung warisan ganda. Ini berarti sebuah kelas tidak dapat memperluas lebih dari satu kelas. Oleh karena itu, berikut ini ilegal:
Contoh
public class extends Animal, Mammal{} Namun, sebuah kelas dapat mengimplementasikan satu atau lebih antarmuka, yang telah membantu Java menghilangkan ketidakmungkinan warisan ganda.