Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Memahami Polimorfisme Java: Konsep dan Penggunaan Praktis

Polimorfisme adalah kemampuan objek untuk mengambil banyak bentuk. Penggunaan paling umum dari polimorfisme dalam OOP terjadi ketika referensi kelas induk digunakan untuk merujuk ke objek kelas anak.

Setiap objek Java yang dapat lulus lebih dari satu tes IS-A dianggap polimorfik. Di Java, semua objek Java polimorfik karena setiap objek akan lulus tes IS-A untuk tipe mereka sendiri dan untuk kelas Object.

Penting untuk diketahui bahwa satu-satunya cara untuk mengakses objek adalah melalui variabel referensi. Variabel referensi hanya dapat memiliki satu tipe. Setelah dideklarasikan, tipe variabel referensi tidak dapat diubah.

Variabel referensi dapat ditetapkan ulang ke objek lain selama tidak dideklarasikan final. Tipe variabel referensi akan menentukan metode yang dapat dipanggil pada objek.

Variabel referensi dapat merujuk ke objek apa pun dari tipe yang dideklarasikannya atau setiap subjenis dari tipe yang dideklarasikannya. Variabel referensi dapat dideklarasikan sebagai tipe kelas atau antarmuka.

Contoh

Mari kita lihat contohnya.

 public interface Vegetarian{} public class Animal{} public class Deer extends Animal implements Vegetarian{} 

Sekarang, kelas Deer dianggap polimorfik karena memiliki warisan ganda. Berikut ini benar untuk contoh di atas:

Saat kita menerapkan fakta variabel referensi ke referensi objek Deer, deklarasi berikut adalah legal:

Contoh

 Deer d = new Deer(); Animal a = d; Vegetarian v = d; Object o = d; 

Semua variabel referensi d, a, v, o merujuk ke objek Deer yang sama di heap.

Metode Virtual

Dalam bagian ini, saya akan menunjukkan bagaimana perilaku metode yang diganti di Java memungkinkan Anda untuk memanfaatkan polimorfisme saat merancang kelas Anda.

Kita telah membahas pengoverridan metode, di mana kelas anak dapat mengganti metode di induknya. Metode yang diganti pada dasarnya tersembunyi di kelas induk, dan tidak akan dipanggil kecuali kelas anak menggunakan kata kunci super dalam metode pengganti.

Contoh

 /* File name : Employee.java */ public class Employee { private String name; private String address; private int number; public Employee(String name, String address, int number) { System.out.println("Constructing an Employee"); this.name = name; this.address = address; this.number = number; } public void mailCheck() { System.out.println("Mailing a check to " + this.name + " " + this.address); } public String toString() { return name + " " + address + " " + number; } public String getName() { return name; } public String getAddress() { return address; } public void setAddress(String newAddress) { address = newAddress; } public int getNumber() { return number; } } 

Sekarang misalkan kita memperluas kelas Employee sebagai berikut:

 /* File name : Salary.java */ public class Salary extends Employee { private double salary; // Annual salary public Salary(String name, String address, int number, double salary) { super(name, address, number); setSalary(salary); } public void mailCheck() { System.out.println("Within mailCheck of Salary class "); System.out.println("Mailing check to " + getName() + " with salary " + salary); } public double getSalary() { return salary; } public void setSalary(double newSalary) { if(newSalary >= 0.0) { salary = newSalary; } } public double computePay() { System.out.println("Computing salary pay for " + getName()); return salary/52; } } 

Sekarang, pelajari program berikut dengan cermat dan coba tentukan keluaran:

 /* File name : VirtualDemo.java */ public class VirtualDemo { public static void main(String [] args) { Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00); Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00); System.out.println("Call mailCheck using Salary reference --"); s.mailCheck(); System.out.println("\n Call mailCheck using Employee reference--"); e.mailCheck(); } } 

Ini akan menghasilkan hasil berikut:

Keluaran

 Constructing an Employee Constructing an Employee Call mailCheck using Salary reference -- Within mailCheck of Salary class Mailing check to Mohd Mohtashim with salary 3600.0 Call mailCheck using Employee reference-- Within mailCheck of Salary class Mailing check to John Adams with salary 2400.0 

Di sini, kita membuat instance dua objek Salary. Satu menggunakan referensi Salary s, dan yang lain menggunakan referensi Employee e.

Saat memanggil s.mailCheck(), compiler melihat mailCheck() di kelas Salary pada waktu kompilasi, dan JVM memanggil mailCheck() di kelas Salary pada waktu runtime.

mailCheck() pada e cukup berbeda karena e adalah referensi Employee. Saat compiler melihat e.mailCheck(), compiler melihat metode mailCheck() di kelas Employee.

Di sini, pada waktu kompilasi, compiler menggunakan mailCheck() di Employee untuk memvalidasi pernyataan ini. Pada waktu runtime, JVM memanggil mailCheck() di kelas Salary.

Perilaku ini disebut pemanggilan metode virtual, dan metode ini disebut sebagai metode virtual. Metode yang diganti dipanggil pada waktu runtime, terlepas dari tipe data referensi yang digunakan dalam kode sumber pada waktu kompilasi.

java

  1. Menguasai Operator Java: Tipe, Sintaks, & Contoh Praktis
  2. Komentar Java: Tipe, Penggunaan, dan Best Practices
  3. Menguasai Java Enhanced For Loop: Sintaks, Contoh, dan Best Practices
  4. Menguasai String Java: Pembuatan, Metode, dan Best Practices
  5. Menguasai Antarmuka Java: Konsep, Implementasi, dan Praktik Terbaik
  6. Menguasai Kelas Dalam Anonim Java: Definisi, Sintaks, dan Contoh Praktis
  7. Menguasai Java Try-with-Resources: Manajemen Sumber Daya Otomatis Dijelaskan
  8. Anotasi Java Dijelaskan: Jenis, Penempatan, dan Contoh Praktis
  9. Pernyataan Java: Panduan Praktis untuk Mendeteksi Bug dan Memastikan Keandalan Kode
  10. Memahami Java Vector: Penggunaan, Fitur, dan Perbandingan dengan ArrayList