SlideShare a Scribd company logo
Modul PBO – Teknokrat
52
POLIMORFISME (POLYMORPISHM)
Tujuan
Praktikan dapat memahami dan menjelaskan konsep polimorfisme dalam
perograman serta dapat mengimplementasikan ke dalam pemrograman Java.
POLIMORFISME
Polimorfisme (polymorpishm) bearti banyak bentuk (bahasa Yunani). Dalam pemrograman
berorientasi obyek, digunakan untuk memerintah obyek agar melakukan aksi atau tindakan yang
mungkin secara prinsip sama namun secara proses berbeda.
Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu interface
banyak aksi. Contoh yang konkrit dalam dunia nyata yaitu mobil. Mobil yang ada dipasaran terdiri
atas berbagai tipe dan berbagai merk, namun semuanya memiliki interface kemudi yang sama,
seperti: stir, tongkat transmisi, pedal gas dan rem. Jika seseorang dapat mengemudikan satu jenis
mobil saja dari satu merk tertentu, maka orang itu akan dapat mengemudikan hamper semua jenis
mobil yang ada, karena semua mobil tersebut menggunakan interface yang sama.
Harus diperhatikan disini bahwa interface yang sama tidak berarti cara kerjanya juga sama. Misal
pedal gas, jika ditekan maka kecepatan mobil akan meningkat, tapi bagaiman proses peningkatan
kecepatan ini dapat berbeda-beda untuk setiap jenis mobil.Dengan menggunakan OOP maka dalam
melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu
masalah tersebut (terstruktur) tetapi obyekobyek apa yang dapat melakukan pemecahan masalah
tersebut.
VIRTUAL METHOD INVOCATION (VMI)
Virtual method invocation (VMI) merupakan suatu hal yang sangat penting dalam konsep
polimorfisme. Syarat terjadinya VMI adalah sebelumnya sudah terjadi polymorphism. Pada saat
obyek yang sudah dibuat tersebut memanggil overridden method pada parent class, kompiler Java
akan melakukan invocation (pemanggilan) terhadap overriding method pada subclass, dimana yang
seharusnya dipanggil adalah overridden. Berikut adalah contoh terjadinya VMI:
Program 6-1
// Test.java
class Parent {
int x = 5;
public void info() {
System.out.println("Ini kelas Parent");
}
}
MODUL
6
Modul PBO – Teknokrat
53
class Child extends Parent {
int x = 10;
public void info() {
System.out.println("Ini kelas Child");
}
}
public class Tes {
public static void main(String [] args) {
Parent tes = new Child();
System.out.println("Nilai x = " + tes.x);
tes.info();
}
}
Hasil Output
Nilai x = 5
Ini kelas Child
Berdasarkan program di atas, yang terjadi adalah:
 Obyek tes mempunyai behavior yang sesuai dengan runtime type bukan compile type
 Ketika compile time tes adalah Parent
 Ketika runtime tes adalah Child
 Jadi:
o tes hanya bisa mengakses variabel milik Parent
o tes hanya bisa mengakses method milik Child
Pada pembentukan
Parent tes = new Child();
Pertama kali akan menjalankan konstruktor Child, ketika bertemu super() maka akan menjalankan
konstruktor Parent (super class), setelah semua statement dieksekusi baru kemudian menjalankan
konstruktor Child (subclass).
POLYMORPHIC ARGUMENTS
Polymorphic arguments adalah tipe data suatu argumen pada suatu method yang bisa menerima
suatu nilai bertipe subclass-nya. Polymorphic arguments diperlukan, bertujuan untuk
mengefisiensikan pembuatan program. Misalnya suatu kelas memiliki banyak subclass, maka perlu
didefinisikan semua method yang menangani behaviour dari masing-masing subclass. Dengan
adanya polymorphic arguments cukup mendefinisikan satu method saja yang bisa digunakan untuk
menangani behaiour semua kelas. Berikut adalah contoh dari polymorphic arguments:
Program 6-
2
// food.java
public class food {
void eat() { System.out.println("this food is great"); }
}
Modul PBO – Teknokrat
54
// tuna.java
public class tuna extends food {
void eat() { System.out.println("this tuna is great"); }
}
// potpie.java
public class potpie extends food {
void eat() { System.out.println("this potpie is great"); }
}
// apples.java
public class apples {
public static void main(String [] args) {
patty bucky = new patty();
food fo = new food();
food po = new potpie();
// penerapan polymorphic argument
bucky.digest(fo);
bucky.digest(po);
}
}
Hasil Output
this food is great
this potpie is great
OPERATOR INSTANCEOF
Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu polymorphic
arguments. Untuk lebih jelas, berikut kita modifikasi contoh program sebelumnya:
Program 6-
3
// food.java
public class food {
void eat() {
System.out.println("this food is great");
}
}
// tuna.java
public class tuna extends food {
void eat() {
System.out.println("this tuna is great");
}
}
// potpie.java
public class potpie extends food {
void eat() {
System.out.println("this potpie is great");
}
}
Modul PBO – Teknokrat
55
// patty.java
public class patty {
public void digest(food x) {
if(x instanceof tuna) {
tuna t = (tuna) x;
t.eat();
} else if(x instanceof potpie) {
potpie p = (potpie) x;
p.eat();
} else {
x.eat();
}
}
}
// apples.java
public class apples {
public static void main(String [] args) {
patty bucky = new patty();
tuna fo = new tuna();
potpie po = new potpie();
bucky.digest(fo);
bucky.digest(po);
}
}
Hasil Output
this potpie is great
this tuna is great
Pemakaian instanceof seringkali diikuti dengan casting obyek dari tipe parameter ke tipe asal.
Contohnya pada program di atas, pada saat kita melakukan instanceof dari tipe tuna, kita dapat
melakukan casting object ke tipe asalnya, yaitu tuna. Berikut adalah cara untuk melakukan casting:
Program 6-4
// patty.java
public class patty {
public void digest(food x) {
// ...
if(x instanceof tuna) {
tuna t = (tuna) x;
// ...
}
// ...
}
}
Tanpa melakukan casting obyek, maka nilai yang akan kita pakai setelah proses instanceof masih
bertipe parent class-nya, sehingga jika tipe tersebut perlu dipakai maka harus dicasting terlebih
dahulu ke tipe subclass-nya.
Modul PBO – Teknokrat
56
OVERRIDING
Overriding adalah suatu keadaan dimana subclass memodifikasi tingkah laku yang diwarisi dari super
class. Tujuannya untuk menspesifikan tingkah laku dari subclass tersebut. Overriding dilakukan
dengan cara mendeklarasikan kembali method milik super class di dalam sub class. Deklarasi method
pada subclass harus sama dengan yang terdapat pada di super class, yaitu kesamaan pada nama,
return type, dan daftar parameter (jumlah, tipe, dan urutan). Method pada parent class disebut
overriden method dan pada subclass disebut overriding method. Berikut ini contoh terjadinya
overriding:
Program 6-5
// Employee.java
public class Employee {
protected String name;
protected double salary;
protected Date birthDate;
public String getDetails() {
return "Name: " + name + "n" +
"Salary: " + salary;
}
}
// Manager.java
public class Manager extends Employee {
protected String departement;
public String getDetail() {
return "Name: " + name + "n" +
"Salary: " + salary + "n" +
"Manager of: " + departement;
}
}
Program 6-6
// Animal.java
public class Animal {
public void setVoice() {
System.out.println("Blesesppblesep");
}
}
// Dog.java
public class Dog extends Animal {
public void setVoice() {
System.out.println("Hug..hug..");
}
}
Berdasarkan contoh program di atas, terjadinya overriding pada method getDetails, dimana method
tersebut di-override oleh kelas Manager. Method yang terkena override (overriden method)
diharuskan tidak boleh mempunyai modifier yang lebih luas aksesnya dari method yang meng-
override (overriding method).
Modul PBO – Teknokrat
57
OVERLOADING
Overloading adalah suatu keadaan dimana beberapa method memiliki nama yang sama namun
mempunyai fungsionalitas yang berbeda. Tujuannya untuk memudahkan penggunaan/pemanggilan
method dengan fungsional yang mirip. Dalam pendeklarasian overloading aturan yang digunakan
yaitu nama method harus sama, daftar parameter harus berbeda, dan return type boleh sama, juga
boleh berbeda. Berikut adalah contoh implementasi overloading:
Program 6-7
// MethodOverload.java
public class MethodOverload {
public void test() {
System.out.println("Kuadrat dari integer 7 = " + kuadrat(7));
System.out.println("Kuadrat dari double 7.5 = " + kuadrat(7.5));
}
// method kuadrat untuk integer
public int kuadrat(int bil) {
return bil * bil;
}
// method kuadrat untuk double
public double kuadrat(double bil) {
return bil * bil;
}
}
// MethodOverloadRun.java
public class MethodOverloadRun {
public static void main(String [] args) {
MethodOverload x = new MethodOverload();
x.test();
}
}
Berdasarkan kode program di atas, method yang di-overloading adalah kuadrat. Berikut adalah
perbedaan pada kedua method tersebut:
Tabel 6. 1 Contoh method overloading
Tipe return Nama method Daftar Parameter
int Kuadrat (int bil)
double Kuadrat (double bil)
↓ ↓ ↓
Berbeda Sama Berbeda
Berikut adalah contoh potongan kode program yang menerapkan method overloading:
Modul PBO – Teknokrat
58
public class Bentuk {
// ...
public void Gambar(int t1) {
// ...
}
public void Gambar(int t1, int t2) {
// ...
}
public void Gambar(int t1, int t2, int t3) {
// ...
}
public void Gambar(int t1, int t2, int t3, int t4) {
// ...
}
}
Overloading juga bisa terjadi antara parent class dengan subclass-nya jika memenuhi ketiga syarat
overload yang sudah disebutkan sebelumnya. Misalnya dari kelas Bentuk pada kode program
sebelumnya diturunkan menjadi kelas baru yang bernama WarnaiBentuk, seperti berikut:
public class Bentuk {
public void Gambar(String warna, int t1) {
// ...
}
public void Gambar(String warna, int t1, int t2) {
// ...
}
// ...
}
CONSTUCTOR OVERLOADING
Suatu kelas bisa memiliki lebih dari satu konstruktor dengan syarat daftar paramenternya tidak
boleh ada yang sama, bentuk inilah yang dinamakan dengan konstruktor overloading. Berikut adalah
contoh bentuk konstruktor overloading:
Program 6-8
// Mahasiswa.java
public class Mahasiswa {
private String npm;
private String nama;
private int umur;
public Mahasiswa() {
// Default konstruktor
npm = "";
nama = "";
umur = 18;
}
Modul PBO – Teknokrat
59
public Mahasiswa(String npm, String nama, int umur) {
// Parameter konstruktor
this.npm = npm;
this.nama = nama;
this.umur = umur;
}
// Getter & Setter Method
public String getNpm() {
return npm;
}
public void setNpm(String npm) {
this.npm = npm;
}
public String getNama() {
return nama;
}
public void setNama(String nama) {
this.nama = nama;
}
public int getUmur() {
return umur;
}
public void setUmur(int umur) {
this.umur = umur;
}
}
// MahasiswaOverloadingTest.java
public class MahasiswaOverloadingTest {
public static void main(String [] args) {
Mahasiswa obj = new Mahasiswa();
System.out.println("NPM : " + obj.getNpm());
System.out.println("Nama : " + obj.getNama());
System.out.println("Umur : " + obj.getUmur());
Mahasiswa obj2 = new Mahasiswa("12312343", "Anditya", 19);
System.out.println("NPM : " + obj2.getNpm());
System.out.println("Nama : " + obj2.getNama());
System.out.println("Umur : " + obj2.getUmur());
}
}
Modul PBO – Teknokrat
60
Lembar Kerja Praktikum: Modul 6
NPM: Asisten:
Nama: Nilai:
Kelas: Tanggal:
Soal
Perhatikan kelas diagram berikut:
1. Jelaskan pengertian dari Polimorfisme, Overloading, dan Overriding.
2. Jelaskan perbedaan antara Polimorfisme dengan Inheritance.
3. Jelaskan perbedaan antara Overloading dengan Overriding.

More Related Content

PDF
Modul pratikum pbo - ENCAPSULATION
PDF
Modul pratikum pbo - inheritance
PDF
Modul PBO Bab-07 - Enkapsulasi (Encapsulation)
DOCX
Laporan PBO Pratikum 3
DOCX
Laporan PBO pratikum 2
PDF
Konsep Inheritance
DOCX
Laporan PBO Modul 4
DOCX
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)
Modul pratikum pbo - ENCAPSULATION
Modul pratikum pbo - inheritance
Modul PBO Bab-07 - Enkapsulasi (Encapsulation)
Laporan PBO Pratikum 3
Laporan PBO pratikum 2
Konsep Inheritance
Laporan PBO Modul 4
Java (Netbeans) - Class, Constructor, Object (Object Oriented Programming)

What's hot (20)

PDF
Modul prak2 constructor dan overloading
DOCX
Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)
DOC
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
PDF
Modul Pemrograman Berorientasi Objek
PDF
Jeni Intro1 Bab11 Pewarisan, Polimorfisme, Dan Interface
PDF
Pelajaran oop java ii pengertian method dan cara pembuatan method by hermawan
DOCX
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
PPT
Pbo inheritance, polymorphism, dan inte
PDF
Pemrograman Berorientasi Objek "Pengenalan JAVA"
PDF
Materi pelatihan java_fundamental
PDF
Materi pelatihan java fundamental
PDF
Modul praktikum PBO
PDF
Modul Object Oriented Programming
PPTX
10. konsep enkapsulasi
PDF
4 abstract class, interface
PPTX
11. inheritance
PPTX
3. struktur program java
PDF
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
PDF
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Modul prak2 constructor dan overloading
Java (Netbeans) Polymorphism - Object Oriented Programming (OOP)
Java (Netbeans) - Abstract & Interface - Object Oriented Programming
Modul Pemrograman Berorientasi Objek
Jeni Intro1 Bab11 Pewarisan, Polimorfisme, Dan Interface
Pelajaran oop java ii pengertian method dan cara pembuatan method by hermawan
Laporan Modul 1 Praktikum Pemrograman Berbasis Objek
Pbo inheritance, polymorphism, dan inte
Pemrograman Berorientasi Objek "Pengenalan JAVA"
Materi pelatihan java_fundamental
Materi pelatihan java fundamental
Modul praktikum PBO
Modul Object Oriented Programming
10. konsep enkapsulasi
4 abstract class, interface
11. inheritance
3. struktur program java
Pemrograman Berorientasi Objek "Pengenalan Dasar Pemrograman JAVA"
Modul PBO Bab-06 - Polimorfisme (Polymorphism)
Ad

Similar to Modul pratikum pbo - Polimorphism (20)

PPTX
pertemuan_06_-_Konsep_PBO(InheratanceMultiple_Inheratance_Polimorpisme.pptx
RTF
Materi object yg kosong
DOCX
Tugas Praktikum ke dua
DOCX
Jobsheet 4 LOOPING( PENGULANGAN)
PPT
Overridung polymorphism
PDF
Unit 6 polymorphism
DOCX
P5 depandi enda
DOCX
04 inheritance
PPTX
Basic Java Application - Sesi 5
DOCX
Laporan pratikum iv web
PDF
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
PPTX
Konsep Overloading (1).pptx
PPTX
Pertemuan5_MethodPemrogramanBerorientasiObject.pptx
PPTX
OOP(Object Oriented Programming) di PHP .pptx
PPTX
PBO ( Pemograman berbasis Objek ).pptx
DOCX
Modul xi dan xii algo
DOC
Modul pbo baru
PPTX
Kelompok 4 [Apasih] - Week2 Learning Progress Review
DOCX
Konsep oop pada php dan mvc pada php framework, 1200631047 1200631018 1200631028
PDF
Modul 5 pbo
pertemuan_06_-_Konsep_PBO(InheratanceMultiple_Inheratance_Polimorpisme.pptx
Materi object yg kosong
Tugas Praktikum ke dua
Jobsheet 4 LOOPING( PENGULANGAN)
Overridung polymorphism
Unit 6 polymorphism
P5 depandi enda
04 inheritance
Basic Java Application - Sesi 5
Laporan pratikum iv web
Modul Praktikum Pemrograman Berorientasi Objek (Chap.1-6)
Konsep Overloading (1).pptx
Pertemuan5_MethodPemrogramanBerorientasiObject.pptx
OOP(Object Oriented Programming) di PHP .pptx
PBO ( Pemograman berbasis Objek ).pptx
Modul xi dan xii algo
Modul pbo baru
Kelompok 4 [Apasih] - Week2 Learning Progress Review
Konsep oop pada php dan mvc pada php framework, 1200631047 1200631018 1200631028
Modul 5 pbo
Ad

More from rahmantoyuri (20)

PDF
new Chapter 10 - Report Kwitansi.pdf
PDF
new Chapter 9 - Coding Form Transaksi Penjualan.pdf
PDF
new Chapter 8 - Coding Form Master Pelanggan (Customer).pdf
PDF
new Chapter 7 - Coding Form Master Barang.pdf
PDF
new Chapter 6 - Kelas Koneksi dan Form Login.pdf
PDF
new Chapter 5 - Coding Form Menu Utama.pdf
PDF
new Chapter 4 - Form Transaksi.pdf
PDF
new Chapter 3 - Form Master.pdf
PDF
new Chapter 2 - New Project Visual Studio C#.pdf
PDF
new Chapter 1 - Membuat Database.pdf
PDF
Slide Ngajar E-Filing cover.pdf
PDF
e filing.pdf
PDF
ELECTRONIC FILING (E-FILING).pdf
PDF
Materi Kearsipan Manual.pdf
PPTX
PRAKTEK JOIN.pptx
PPTX
VIEW.pptx
PPTX
JOIN.pptx
PPTX
Fungsi Agregat.pptx
PPTX
SELECT.pptx
PPTX
Data Manipulation language (DML).pptx
new Chapter 10 - Report Kwitansi.pdf
new Chapter 9 - Coding Form Transaksi Penjualan.pdf
new Chapter 8 - Coding Form Master Pelanggan (Customer).pdf
new Chapter 7 - Coding Form Master Barang.pdf
new Chapter 6 - Kelas Koneksi dan Form Login.pdf
new Chapter 5 - Coding Form Menu Utama.pdf
new Chapter 4 - Form Transaksi.pdf
new Chapter 3 - Form Master.pdf
new Chapter 2 - New Project Visual Studio C#.pdf
new Chapter 1 - Membuat Database.pdf
Slide Ngajar E-Filing cover.pdf
e filing.pdf
ELECTRONIC FILING (E-FILING).pdf
Materi Kearsipan Manual.pdf
PRAKTEK JOIN.pptx
VIEW.pptx
JOIN.pptx
Fungsi Agregat.pptx
SELECT.pptx
Data Manipulation language (DML).pptx

Recently uploaded (20)

DOCX
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
DOCX
Modul Ajar Deep Learning PAI & BP Kelas 12 SMA Terbaru 2025
PDF
Digital Statecraft Menuju Indonesia Emas 2045: Diplomasi Digital, Ketahanan N...
PPTX
Kebijakan Pembelajaran Koding dan Kecerdasan Artifisial (Koding-KA).pptx
PPT
Kamera foto dan editing foto pengenalan fotografi
DOCX
Modul Ajar Deep Learning Bahasa Inggris Kelas 12 SMA Terbaru 2025
DOCX
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
PPSX
Teknik Trading Selang Seling Yang Dapat Digunakan Untuk Trading Manual Maupun...
PPTX
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
PDF
Tren dan Isu Kebutuhan Soft Skill dan Hard Skill Tenaga Kesehatan di RS - dr....
PPTX
Modul 4 Asesmen-dalam-Pembelajaran-Mendalam.pptx
DOCX
Modul Ajar Deep Learning PJOK Kelas 12 SMA Terbaru 2025
PPTX
Model Lintas minat dan pendalaman materi
PDF
1.Materi Kebijakan Umum Program Revit.pdf
PDF
ANALISIS SOALAN BAHASA MELAYU SPM 2021-2024 (1).pdf
PPTX
Materi-Geografi-Pendekatan-Konsep-dan-Prinsip-Geografi-Kelas-10.pptx
PPTX
Konsep & Strategi Penyusunan HPS _Pelatihan "Ketentuan TERBARU Pengadaan" (...
PPTX
PROGRAM KOKURIKULER KELAS 9 TEMA 1_20250811_075823_0000.pptx
DOCX
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
PPTX
Bahan Tayang OJT Pembelajaran Mendalam KS
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
Modul Ajar Deep Learning PAI & BP Kelas 12 SMA Terbaru 2025
Digital Statecraft Menuju Indonesia Emas 2045: Diplomasi Digital, Ketahanan N...
Kebijakan Pembelajaran Koding dan Kecerdasan Artifisial (Koding-KA).pptx
Kamera foto dan editing foto pengenalan fotografi
Modul Ajar Deep Learning Bahasa Inggris Kelas 12 SMA Terbaru 2025
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
Teknik Trading Selang Seling Yang Dapat Digunakan Untuk Trading Manual Maupun...
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
Tren dan Isu Kebutuhan Soft Skill dan Hard Skill Tenaga Kesehatan di RS - dr....
Modul 4 Asesmen-dalam-Pembelajaran-Mendalam.pptx
Modul Ajar Deep Learning PJOK Kelas 12 SMA Terbaru 2025
Model Lintas minat dan pendalaman materi
1.Materi Kebijakan Umum Program Revit.pdf
ANALISIS SOALAN BAHASA MELAYU SPM 2021-2024 (1).pdf
Materi-Geografi-Pendekatan-Konsep-dan-Prinsip-Geografi-Kelas-10.pptx
Konsep & Strategi Penyusunan HPS _Pelatihan "Ketentuan TERBARU Pengadaan" (...
PROGRAM KOKURIKULER KELAS 9 TEMA 1_20250811_075823_0000.pptx
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
Bahan Tayang OJT Pembelajaran Mendalam KS

Modul pratikum pbo - Polimorphism

  • 1. Modul PBO – Teknokrat 52 POLIMORFISME (POLYMORPISHM) Tujuan Praktikan dapat memahami dan menjelaskan konsep polimorfisme dalam perograman serta dapat mengimplementasikan ke dalam pemrograman Java. POLIMORFISME Polimorfisme (polymorpishm) bearti banyak bentuk (bahasa Yunani). Dalam pemrograman berorientasi obyek, digunakan untuk memerintah obyek agar melakukan aksi atau tindakan yang mungkin secara prinsip sama namun secara proses berbeda. Dalam konsep yang lebih umum sering kali polymorphism disebut dalam istilah satu interface banyak aksi. Contoh yang konkrit dalam dunia nyata yaitu mobil. Mobil yang ada dipasaran terdiri atas berbagai tipe dan berbagai merk, namun semuanya memiliki interface kemudi yang sama, seperti: stir, tongkat transmisi, pedal gas dan rem. Jika seseorang dapat mengemudikan satu jenis mobil saja dari satu merk tertentu, maka orang itu akan dapat mengemudikan hamper semua jenis mobil yang ada, karena semua mobil tersebut menggunakan interface yang sama. Harus diperhatikan disini bahwa interface yang sama tidak berarti cara kerjanya juga sama. Misal pedal gas, jika ditekan maka kecepatan mobil akan meningkat, tapi bagaiman proses peningkatan kecepatan ini dapat berbeda-beda untuk setiap jenis mobil.Dengan menggunakan OOP maka dalam melakukan pemecahan suatu masalah kita tidak melihat bagaimana cara menyelesaikan suatu masalah tersebut (terstruktur) tetapi obyekobyek apa yang dapat melakukan pemecahan masalah tersebut. VIRTUAL METHOD INVOCATION (VMI) Virtual method invocation (VMI) merupakan suatu hal yang sangat penting dalam konsep polimorfisme. Syarat terjadinya VMI adalah sebelumnya sudah terjadi polymorphism. Pada saat obyek yang sudah dibuat tersebut memanggil overridden method pada parent class, kompiler Java akan melakukan invocation (pemanggilan) terhadap overriding method pada subclass, dimana yang seharusnya dipanggil adalah overridden. Berikut adalah contoh terjadinya VMI: Program 6-1 // Test.java class Parent { int x = 5; public void info() { System.out.println("Ini kelas Parent"); } } MODUL 6
  • 2. Modul PBO – Teknokrat 53 class Child extends Parent { int x = 10; public void info() { System.out.println("Ini kelas Child"); } } public class Tes { public static void main(String [] args) { Parent tes = new Child(); System.out.println("Nilai x = " + tes.x); tes.info(); } } Hasil Output Nilai x = 5 Ini kelas Child Berdasarkan program di atas, yang terjadi adalah:  Obyek tes mempunyai behavior yang sesuai dengan runtime type bukan compile type  Ketika compile time tes adalah Parent  Ketika runtime tes adalah Child  Jadi: o tes hanya bisa mengakses variabel milik Parent o tes hanya bisa mengakses method milik Child Pada pembentukan Parent tes = new Child(); Pertama kali akan menjalankan konstruktor Child, ketika bertemu super() maka akan menjalankan konstruktor Parent (super class), setelah semua statement dieksekusi baru kemudian menjalankan konstruktor Child (subclass). POLYMORPHIC ARGUMENTS Polymorphic arguments adalah tipe data suatu argumen pada suatu method yang bisa menerima suatu nilai bertipe subclass-nya. Polymorphic arguments diperlukan, bertujuan untuk mengefisiensikan pembuatan program. Misalnya suatu kelas memiliki banyak subclass, maka perlu didefinisikan semua method yang menangani behaviour dari masing-masing subclass. Dengan adanya polymorphic arguments cukup mendefinisikan satu method saja yang bisa digunakan untuk menangani behaiour semua kelas. Berikut adalah contoh dari polymorphic arguments: Program 6- 2 // food.java public class food { void eat() { System.out.println("this food is great"); } }
  • 3. Modul PBO – Teknokrat 54 // tuna.java public class tuna extends food { void eat() { System.out.println("this tuna is great"); } } // potpie.java public class potpie extends food { void eat() { System.out.println("this potpie is great"); } } // apples.java public class apples { public static void main(String [] args) { patty bucky = new patty(); food fo = new food(); food po = new potpie(); // penerapan polymorphic argument bucky.digest(fo); bucky.digest(po); } } Hasil Output this food is great this potpie is great OPERATOR INSTANCEOF Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari suatu polymorphic arguments. Untuk lebih jelas, berikut kita modifikasi contoh program sebelumnya: Program 6- 3 // food.java public class food { void eat() { System.out.println("this food is great"); } } // tuna.java public class tuna extends food { void eat() { System.out.println("this tuna is great"); } } // potpie.java public class potpie extends food { void eat() { System.out.println("this potpie is great"); } }
  • 4. Modul PBO – Teknokrat 55 // patty.java public class patty { public void digest(food x) { if(x instanceof tuna) { tuna t = (tuna) x; t.eat(); } else if(x instanceof potpie) { potpie p = (potpie) x; p.eat(); } else { x.eat(); } } } // apples.java public class apples { public static void main(String [] args) { patty bucky = new patty(); tuna fo = new tuna(); potpie po = new potpie(); bucky.digest(fo); bucky.digest(po); } } Hasil Output this potpie is great this tuna is great Pemakaian instanceof seringkali diikuti dengan casting obyek dari tipe parameter ke tipe asal. Contohnya pada program di atas, pada saat kita melakukan instanceof dari tipe tuna, kita dapat melakukan casting object ke tipe asalnya, yaitu tuna. Berikut adalah cara untuk melakukan casting: Program 6-4 // patty.java public class patty { public void digest(food x) { // ... if(x instanceof tuna) { tuna t = (tuna) x; // ... } // ... } } Tanpa melakukan casting obyek, maka nilai yang akan kita pakai setelah proses instanceof masih bertipe parent class-nya, sehingga jika tipe tersebut perlu dipakai maka harus dicasting terlebih dahulu ke tipe subclass-nya.
  • 5. Modul PBO – Teknokrat 56 OVERRIDING Overriding adalah suatu keadaan dimana subclass memodifikasi tingkah laku yang diwarisi dari super class. Tujuannya untuk menspesifikan tingkah laku dari subclass tersebut. Overriding dilakukan dengan cara mendeklarasikan kembali method milik super class di dalam sub class. Deklarasi method pada subclass harus sama dengan yang terdapat pada di super class, yaitu kesamaan pada nama, return type, dan daftar parameter (jumlah, tipe, dan urutan). Method pada parent class disebut overriden method dan pada subclass disebut overriding method. Berikut ini contoh terjadinya overriding: Program 6-5 // Employee.java public class Employee { protected String name; protected double salary; protected Date birthDate; public String getDetails() { return "Name: " + name + "n" + "Salary: " + salary; } } // Manager.java public class Manager extends Employee { protected String departement; public String getDetail() { return "Name: " + name + "n" + "Salary: " + salary + "n" + "Manager of: " + departement; } } Program 6-6 // Animal.java public class Animal { public void setVoice() { System.out.println("Blesesppblesep"); } } // Dog.java public class Dog extends Animal { public void setVoice() { System.out.println("Hug..hug.."); } } Berdasarkan contoh program di atas, terjadinya overriding pada method getDetails, dimana method tersebut di-override oleh kelas Manager. Method yang terkena override (overriden method) diharuskan tidak boleh mempunyai modifier yang lebih luas aksesnya dari method yang meng- override (overriding method).
  • 6. Modul PBO – Teknokrat 57 OVERLOADING Overloading adalah suatu keadaan dimana beberapa method memiliki nama yang sama namun mempunyai fungsionalitas yang berbeda. Tujuannya untuk memudahkan penggunaan/pemanggilan method dengan fungsional yang mirip. Dalam pendeklarasian overloading aturan yang digunakan yaitu nama method harus sama, daftar parameter harus berbeda, dan return type boleh sama, juga boleh berbeda. Berikut adalah contoh implementasi overloading: Program 6-7 // MethodOverload.java public class MethodOverload { public void test() { System.out.println("Kuadrat dari integer 7 = " + kuadrat(7)); System.out.println("Kuadrat dari double 7.5 = " + kuadrat(7.5)); } // method kuadrat untuk integer public int kuadrat(int bil) { return bil * bil; } // method kuadrat untuk double public double kuadrat(double bil) { return bil * bil; } } // MethodOverloadRun.java public class MethodOverloadRun { public static void main(String [] args) { MethodOverload x = new MethodOverload(); x.test(); } } Berdasarkan kode program di atas, method yang di-overloading adalah kuadrat. Berikut adalah perbedaan pada kedua method tersebut: Tabel 6. 1 Contoh method overloading Tipe return Nama method Daftar Parameter int Kuadrat (int bil) double Kuadrat (double bil) ↓ ↓ ↓ Berbeda Sama Berbeda Berikut adalah contoh potongan kode program yang menerapkan method overloading:
  • 7. Modul PBO – Teknokrat 58 public class Bentuk { // ... public void Gambar(int t1) { // ... } public void Gambar(int t1, int t2) { // ... } public void Gambar(int t1, int t2, int t3) { // ... } public void Gambar(int t1, int t2, int t3, int t4) { // ... } } Overloading juga bisa terjadi antara parent class dengan subclass-nya jika memenuhi ketiga syarat overload yang sudah disebutkan sebelumnya. Misalnya dari kelas Bentuk pada kode program sebelumnya diturunkan menjadi kelas baru yang bernama WarnaiBentuk, seperti berikut: public class Bentuk { public void Gambar(String warna, int t1) { // ... } public void Gambar(String warna, int t1, int t2) { // ... } // ... } CONSTUCTOR OVERLOADING Suatu kelas bisa memiliki lebih dari satu konstruktor dengan syarat daftar paramenternya tidak boleh ada yang sama, bentuk inilah yang dinamakan dengan konstruktor overloading. Berikut adalah contoh bentuk konstruktor overloading: Program 6-8 // Mahasiswa.java public class Mahasiswa { private String npm; private String nama; private int umur; public Mahasiswa() { // Default konstruktor npm = ""; nama = ""; umur = 18; }
  • 8. Modul PBO – Teknokrat 59 public Mahasiswa(String npm, String nama, int umur) { // Parameter konstruktor this.npm = npm; this.nama = nama; this.umur = umur; } // Getter & Setter Method public String getNpm() { return npm; } public void setNpm(String npm) { this.npm = npm; } public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public int getUmur() { return umur; } public void setUmur(int umur) { this.umur = umur; } } // MahasiswaOverloadingTest.java public class MahasiswaOverloadingTest { public static void main(String [] args) { Mahasiswa obj = new Mahasiswa(); System.out.println("NPM : " + obj.getNpm()); System.out.println("Nama : " + obj.getNama()); System.out.println("Umur : " + obj.getUmur()); Mahasiswa obj2 = new Mahasiswa("12312343", "Anditya", 19); System.out.println("NPM : " + obj2.getNpm()); System.out.println("Nama : " + obj2.getNama()); System.out.println("Umur : " + obj2.getUmur()); } }
  • 9. Modul PBO – Teknokrat 60 Lembar Kerja Praktikum: Modul 6 NPM: Asisten: Nama: Nilai: Kelas: Tanggal: Soal Perhatikan kelas diagram berikut: 1. Jelaskan pengertian dari Polimorfisme, Overloading, dan Overriding. 2. Jelaskan perbedaan antara Polimorfisme dengan Inheritance. 3. Jelaskan perbedaan antara Overloading dengan Overriding.