Polimorfisme Jawa
Polimorfisme Java
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 yang berbeda dalam skenario yang berbeda.
Contoh:Polimorfisme Java
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
Rendering Square...
Rendering Circle...
Pada contoh di atas, kita telah membuat superclass:Polygon dan dua subkelas:Persegi dan Lingkaran . Perhatikan penggunaan render()
metode.
Tujuan utama dari render()
metode adalah untuk membuat bentuk. Namun, proses rendering persegi berbeda dengan proses rendering lingkaran.
Oleh karena itu, render()
metode berperilaku berbeda di kelas yang berbeda. Atau, kita bisa mengatakan render()
adalah polimorfik.
Mengapa Polimorfisme?
Polimorfisme memungkinkan kita untuk membuat kode yang konsisten. Pada contoh sebelumnya, kita juga dapat membuat metode yang berbeda:renderSquare()
dan renderCircle()
untuk membuat Persegi dan Lingkaran , masing-masing.
Ini akan bekerja dengan sempurna. Namun, untuk setiap bentuk, kita perlu membuat metode yang berbeda. Itu akan membuat kode kita tidak konsisten.
Untuk mengatasi ini, polimorfisme di Java memungkinkan kita untuk membuat satu metode render()
yang akan berperilaku berbeda untuk bentuk yang berbeda.
Catatan :print()
metode juga merupakan contoh polimorfisme. Ini digunakan untuk mencetak nilai dari berbagai jenis seperti char
, int
, string
, dll.
Kita dapat mencapai polimorfisme di Java menggunakan cara berikut:
- Penggantian Metode
- Metode Kelebihan Beban
- Operator Kelebihan Beban
Penggantian Metode Java
Selama pewarisan di Jawa, jika metode yang sama ada di superclass dan subclass. Kemudian, metode di subclass menimpa metode yang sama di superclass. Ini disebut penggantian metode.
Dalam hal ini, metode yang sama akan melakukan satu operasi di superclass dan operasi lain di subclass. Misalnya,
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 :
Java Programming Language
Common English Language
Pada contoh di atas, kita telah membuat superclass bernama Language dan subkelas bernama Java . Di sini, metode displayInfo()
hadir dalam Bahasa dan Java .
Penggunaan displayInfo()
adalah untuk mencetak informasi. Namun, ia mencetak informasi yang berbeda dalam Bahasa dan Java .
Berdasarkan objek yang digunakan untuk memanggil metode, informasi terkait akan dicetak.
Catatan :Metode yang dipanggil ditentukan selama eksekusi program. Oleh karena itu, penggantian metode adalah polimorfisme run-time .
2. Kelebihan Metode Java
Di kelas Java, kita dapat membuat metode dengan nama yang sama jika parameternya berbeda. Misalnya,
void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }
Ini dikenal sebagai metode overloading di Jawa. Di sini, metode yang sama akan melakukan operasi yang berbeda berdasarkan parameter.
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("\n");
// call method with a single argument
d1.display('#');
}
}
Keluaran :
**********
##########
Pada contoh di atas, kita telah membuat sebuah 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 utama display()
adalah untuk mencetak pola. Namun, berdasarkan argumen yang diberikan, metode ini melakukan operasi yang berbeda:
- mencetak pola
*
, jika tidak ada argumen yang diteruskan atau
- mencetak pola parameter, jika satu
char
jenis argumen dilewatkan.
Catatan :Metode yang dipanggil ditentukan oleh compiler. Oleh karena itu, ini juga dikenal sebagai polimorfisme waktu kompilasi.
3. Overload Operator Java
Beberapa operator di Java berperilaku berbeda dengan operan yang berbeda. Misalnya,
+
operator kelebihan beban untuk melakukan penambahan numerik serta penggabungan string, dan
- operator seperti
&
, |
, dan !
kelebihan beban untuk operasi logis dan bitwise.
Mari kita lihat bagaimana kita dapat mencapai polimorfisme menggunakan kelebihan operator.
+
operator digunakan untuk menambahkan dua entitas. Namun, di Java, +
operator melakukan dua operasi.
1. Saat +
digunakan dengan angka (bilangan bulat dan angka floating-point), ia melakukan penjumlahan matematis. Misalnya,
int a = 5;
int b = 6;
// + with numbers
int sum = a + b; // Output = 11
2. Saat kita menggunakan +
operator dengan string, ia akan melakukan penggabungan string (menggabungkan dua string). Misalnya,
String first = "Java ";
String second = "Programming";
// + with strings
name = first + second; // Output = Java Programming
Di sini, kita dapat melihat bahwa +
operator kelebihan beban di Jawa untuk melakukan dua operasi:penambahan dan gabungan .
Catatan :Dalam bahasa seperti C++, kita dapat mendefinisikan operator untuk bekerja secara berbeda untuk operan yang berbeda. Namun, Java tidak mendukung kelebihan beban operator yang ditentukan pengguna.
Variabel Polimorfik
Sebuah variabel disebut polimorfik jika mengacu pada nilai yang berbeda dalam kondisi yang berbeda.
Variabel objek (variabel instance) mewakili perilaku variabel polimorfik di Jawa. Hal ini karena variabel objek dari suatu kelas dapat merujuk ke objek dari kelasnya maupun objek dari subkelasnya.
Contoh:Variabel Polimorfik
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();
}
}
Keluaran :
I am Programming Language.
I am Object-Oriented Programming Language.
Pada contoh di atas, kita telah membuat variabel objek pl dari Bahasa Pemrograman kelas. Di sini, pl adalah variabel polimorfik. Ini karena,
- Dalam pernyataan
pl = new ProgrammingLanguage()
, pl merujuk ke objek ProgrammingLanguage kelas.
- Dan, dalam pernyataan
pl = new Java()
, pl merujuk ke objek Java kelas.
Ini adalah contoh upcasting di Java.