java
Polimorfisme adalah kemampuan suatu objek untuk mengambil banyak bentuk. Penggunaan polimorfisme yang paling umum di OOP terjadi ketika referensi kelas induk digunakan untuk merujuk ke objek kelas anak.
Objek Java apa pun yang dapat lulus lebih dari satu tes IS-A dianggap polimorfik. Di Java, semua objek Java bersifat polimorfik karena objek apa pun akan lulus uji IS-A untuk tipenya sendiri dan untuk kelas Object.
Penting untuk diketahui bahwa satu-satunya cara yang mungkin untuk mengakses suatu objek adalah melalui variabel referensi. Variabel referensi hanya dapat terdiri dari satu jenis. Setelah dideklarasikan, jenis variabel referensi tidak dapat diubah.
Variabel referensi dapat dipindahkan ke objek lain asalkan tidak dinyatakan final. Jenis variabel referensi akan menentukan metode yang dapat dipanggil pada objek.
Variabel referensi dapat merujuk ke objek apa pun dari tipe yang dideklarasikan atau subtipe dari tipe yang dideklarasikan. Variabel referensi dapat dideklarasikan sebagai kelas atau tipe antarmuka.
Mari kita lihat sebuah contoh.
public interface Vegetarian{} public class Animal{} public class Deer extends Animal implements Vegetarian{}
Sekarang, kelas Rusa dianggap polimorfik karena memiliki banyak pewarisan. Berikut ini benar untuk contoh di atas
Saat kami menerapkan fakta variabel referensi ke referensi objek Rusa, deklarasi berikut adalah sah −
Deer d = new Deer(); Animal a = d; Vegetarian v = d; Object o = d;
Semua variabel referensi d, a, v, o merujuk ke objek Rusa yang sama di heap.
Di bagian ini, saya akan menunjukkan kepada Anda bagaimana perilaku metode yang diganti di Java memungkinkan Anda memanfaatkan polimorfisme saat mendesain kelas Anda.
Kita sudah membahas metode override, di mana kelas anak dapat menimpa metode di induknya. Metode yang diganti pada dasarnya tersembunyi di kelas induk, dan tidak dipanggil kecuali kelas anak menggunakan kata kunci super di dalam metode utama.
/* 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 Karyawan 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, Anda mempelajari program berikut dengan cermat dan mencoba menentukan outputnya
/* 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
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, kami membuat instance dua objek Gaji. Satu menggunakan referensi Gaji s , dan yang lainnya menggunakan referensi Karyawan e .
Saat menjalankan s.mailCheck() , compiler melihat mailCheck() di kelas Gaji pada waktu kompilasi, dan JVM memanggil mailCheck() di kelas Gaji pada waktu proses.
mailCheck() pada e sangat berbeda karena e adalah referensi Karyawan. Ketika kompilator melihat e.mailCheck() , compiler melihat metode mailCheck() di kelas Karyawan.
Di sini, pada waktu kompilasi, kompilator menggunakan mailCheck() di Employee untuk memvalidasi pernyataan ini. Namun, pada saat dijalankan, JVM memanggil mailCheck() di kelas Gaji.
Perilaku ini disebut sebagai pemanggilan metode virtual, dan metode ini disebut sebagai metode virtual. Metode yang ditimpa dipanggil pada waktu proses, apa pun tipe data referensi yang digunakan dalam kode sumber pada waktu kompilasi.
java
Antarmuka Antrian Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java Queue dan metodenya. Queue antarmuka kerangka koleksi Java menyediakan fungsionalitas struktur data antrian. Ini memperluas Collection antarmuka. Kelas yang Menerapkan Antrian Sejak Queue adalah antarmuka, kami t
Java PriorityQueue Dalam tutorial ini, kita akan belajar tentang kelas PriorityQueue dari framework koleksi Java dengan bantuan contoh. PriorityQueue class menyediakan fungsionalitas struktur data heap. Ini mengimplementasikan antarmuka Antrian. Tidak seperti antrian normal, elemen antrian pri
Antarmuka Deque Java Dalam tutorial ini, kita akan belajar tentang antarmuka Deque, cara menggunakannya, dan metodenya. Deque antarmuka kerangka koleksi Java menyediakan fungsionalitas antrian berujung ganda. Ini memperluas Queue antarmuka. Kerja Deque Dalam antrian biasa, elemen ditambahkan dar
Apa itu Polimorfisme di Java? Polimorfisme di Jawa terjadi ketika ada satu atau lebih kelas atau objek yang terkait satu sama lain melalui pewarisan. Ini adalah kemampuan suatu objek untuk mengambil banyak bentuk. Warisan memungkinkan pengguna mewarisi atribut dan metode, dan polimorfisme menggunak