Polimorfisme Jawa (Dengan Contoh)

Dalam tutorial ini, kita akan belajar tentang polimorfisme Java dan implementasinya dengan bantuan contoh.

Polimorfisme adalah konsep penting dari pemrograman berorientasi objek. Ini berarti lebih dari satu bentuk.

Artinya, entitas yang sama (metode atau operator atau objek) dapat melakukan operasi berbeda dalam skenario berbeda.

Contoh: Polimorfisme Jawa

 class Polygon ( // method to render a shape public void render() ( System.out.println("Rendering Polygon… "); ) ) class Square extends Polygon ( // renders Square public void render() ( System.out.println("Rendering Square… "); ) ) class Circle extends Polygon ( // renders circle public void render() ( System.out.println("Rendering Circle… "); ) ) class Main ( public static void main(String() args) ( // create an object of Square Square s1 = new Square(); s1.render(); // create an object of Circle Circle c1 = new Circle(); c1.render(); ) )

Keluaran

 Merender Kotak… Merender Lingkaran… 

Pada contoh di atas, kami telah membuat superclass: Polygon dan dua subclass: Square dan Circle. Perhatikan penggunaan render()metode ini.

Tujuan utama dari render()metode ini adalah untuk membuat bentuk. Namun, proses rendering persegi berbeda dengan proses rendering lingkaran.

Oleh karena itu, render()metode ini berperilaku berbeda di kelas yang berbeda. Atau, bisa kita katakan render()adalah polimorfik.

Mengapa Polimorfisme?

Polimorfisme memungkinkan kita membuat kode yang konsisten. Pada contoh sebelumnya, kita juga dapat membuat metode yang berbeda: renderSquare()dan renderCircle()untuk merender Square dan Circle.

Ini akan bekerja dengan sempurna. Namun, untuk setiap bentuk, kita perlu membuat metode yang berbeda. Ini akan membuat kode kita tidak konsisten.

Untuk mengatasi ini, polimorfisme di Java memungkinkan kita membuat satu metode render()yang akan berperilaku berbeda untuk berbagai bentuk.

Catatan : print()Metode ini juga merupakan contoh polimorfisme. Hal ini digunakan untuk mencetak nilai dari berbagai jenis seperti char, int, string, dll

Kita dapat mencapai polimorfisme di Java dengan cara berikut:

  1. Metode Mengganti
  2. Metode Overloading
  3. Operator Berlebihan

Mengganti Metode Java

Selama pewarisan di Java, jika metode yang sama ada di superclass dan subclass. Kemudian, metode di subkelas mengganti metode yang sama di superkelas. Ini disebut metode overriding.

Dalam kasus ini, metode yang sama akan melakukan satu operasi di superclass dan operasi lain di subclass. Sebagai contoh,

Contoh 1: Polimorfisme menggunakan metode overriding

 class Language ( public void displayInfo() ( System.out.println("Common English Language"); ) ) class Java extends Language ( @Override public void displayInfo() ( System.out.println("Java Programming Language"); ) ) class Main ( public static void main(String() args) ( // create an object of Java class Java j1 = new Java(); j1.displayInfo(); // create an object of Language class Language l1 = new Language(); l1.displayInfo(); ) )

Keluaran :

 Bahasa Pemrograman Java Bahasa Inggris Umum

Dalam contoh di atas, kami telah membuat superclass bernama Language dan subclass bernama Java. Di sini, metode displayInfo()tersebut hadir dalam Bahasa dan Java.

Kegunaannya displayInfo()adalah untuk mencetak informasi. Namun, ini mencetak informasi berbeda dalam Bahasa dan Java.

Berdasarkan objek yang digunakan untuk memanggil metode tersebut, informasi terkait dicetak.

Kerja Polimorfisme Jawa

Catatan : Metode yang dipanggil ditentukan selama eksekusi program. Oleh karena itu, penggantian metode adalah polimorfisme run-time .

2. Overloading Metode Java

Di kelas Java, kita bisa membuat metode dengan nama yang sama jika berbeda dalam parameter. Sebagai contoh,

 void func() (… ) void func(int a) (… ) float func(double a) (… ) float func(int a, float b) (… )

Ini dikenal sebagai metode overloading di Java. Di sini, metode yang sama akan melakukan operasi yang berbeda berdasarkan parameternya.

Contoh 3: Polimorfisme menggunakan metode overloading

 class Pattern ( // method without parameter public void display() ( for (int i = 0; i < 10; i++) ( System.out.print("*"); ) ) // method with single parameter public void display(char symbol) ( for (int i = 0; i < 10; i++) ( System.out.print(symbol); ) ) ) class Main ( public static void main(String() args) ( Pattern d1 = new Pattern(); // call method without any argument d1.display(); System.out.println(""); // call method with a single argument d1.display('#'); ) )

Keluaran :

 ********** ##########

Pada contoh di atas, kami telah membuat kelas bernama Pattern. Kelas berisi metode bernama display()yang kelebihan beban.

 // method with no arguments display() (… ) // method with a single char type argument display(char symbol) (… )

Di sini, fungsi utamanya display()adalah mencetak pola. Namun, berdasarkan argumen yang diteruskan, metode ini melakukan operasi yang berbeda:

  • mencetak pola *, jika tidak ada argumen yang diberikan atau
  • mencetak pola parameter, jika charargumen tipe tunggal dilewatkan.

Catatan : Metode yang dipanggil ditentukan oleh kompilator. Oleh karena itu, ini juga dikenal sebagai polimorfisme waktu kompilasi.

3. Overloading Operator Java

Beberapa operator di Java berperilaku berbeda dengan operan yang berbeda. Sebagai contoh,

  • + operator kelebihan beban untuk melakukan penambahan numerik serta penggabungan string, dan
  • operator menyukai &,, |dan !kelebihan beban untuk operasi logis dan bitwise.

Mari kita lihat bagaimana kita bisa mencapai polimorfisme menggunakan operator overloading.

The +operator yang digunakan untuk menambahkan dua entitas. Namun, di Java, +operator melakukan dua operasi.

1. Ketika +digunakan dengan bilangan (bilangan bulat dan bilangan floating-point), ia melakukan penambahan matematis. Sebagai contoh,

 int a = 5; int b = 6; // + with numbers int sum = a + b; // Output = 11

2. Jika kita menggunakan +operator dengan string, maka akan dilakukan penggabungan string (menggabungkan dua string). Sebagai contoh,

 String first = "Java "; String second = "Programming"; // + with strings name = first + second; // Output = Java Programming

Here, we can see that the + operator is overloaded in Java to perform two operations: addition and concatenation.

Note: In languages like C++, we can define operators to work differently for different operands. However, Java doesn't support user-defined operator overloading.

Polymorphic Variables

A variable is called polymorphic if it refers to different values under different conditions.

Object variables (instance variables) represent the behavior of polymorphic variables in Java. It is because object variables of a class can refer to objects of its class as well as objects of its subclasses.

Example: Polymorphic Variables

 class ProgrammingLanguage ( public void display() ( System.out.println("I am Programming Language."); ) ) class Java extends ProgrammingLanguage ( @Override public void display() ( System.out.println("I am Object-Oriented Programming Language."); ) ) class Main ( public static void main(String() args) ( // declare an object variable ProgrammingLanguage pl; // create object of ProgrammingLanguage pl = new ProgrammingLanguage(); pl.display(); // create object of Java class pl = new Java(); pl.display(); ) )

Output:

 I am Programming Language. I am Object-Oriented Programming Language.

Dalam contoh di atas, kami telah membuat variabel objek dari kelas ProgrammingLanguage. Di sini, pl adalah variabel polimorfik. Hal ini karena,

  • Dalam pernyataannya pl = new ProgrammingLanguage(), pl merujuk ke objek kelas ProgrammingLanguage.
  • Dan, dalam pernyataan pl = new Java(), pl mengacu pada objek kelas Java.

Ini adalah contoh upcasting di Jawa.

Artikel yang menarik...