Polimorfisme dalam inheritance memungkinkan objek dari
subclass digunakan di mana pun objek superclass diharapkan, dan memungkinkan
metode yang sama untuk berperilaku berbeda tergantung pada kelas objek yang
memanggilnya. Polimorfisme memberikan fleksibilitas pada kode sehingga metode
yang sama bisa diimplementasikan secara berbeda di kelas yang berbeda, namun
tetap bisa dipanggil melalui referensi superclass.
Penjelasan Polimorfisme
Dalam inheritance, polimorfisme memungkinkan satu metode
yang sama di superclass di-override (ditimpa) di subclass untuk
memberikan perilaku yang sesuai dengan subclass tersebut. Ini memungkinkan kode
yang memanggil metode di superclass tetap bisa menggunakan metode dengan nama
yang sama di subclass. Ini mengurangi kebutuhan untuk menulis kode tambahan
untuk memeriksa tipe objek atau memanggil metode spesifik berdasarkan tipe.
Dengan polimorfisme:
- Kita
dapat menambah jenis display baru dengan mudah tanpa harus mengubah kode
yang memanggil display().
- Kode
menjadi lebih modular dan mudah dibaca karena menggunakan metode yang sama
(display()) namun sesuai konteks.
- Menghindari
kondisi if-else untuk memeriksa tipe Post, sehingga kode lebih bersih dan
ringkas.
Polimorfisme memudahkan penulisan kode yang fleksibel dan
mudah di-maintain dalam sistem yang mengandung hierarki kelas yang beragam.
Overriding
Overriding adalah fitur dalam pemrograman
berorientasi objek yang memungkinkan subclass untuk menyediakan implementasi
spesifik dari suatu metode yang sudah didefinisikan di superclass.
Ciri-ciri utama Overriding:
- Nama,
Parameter, dan Tipe Pengembalian yang Sama: Metode di subclass harus
memiliki nama, parameter, dan tipe pengembalian yang sama dengan metode di
superclass.
- Dukungan
Polimorfisme: Overriding memungkinkan penggunaan polimorfisme, di mana
objek dari subclass dapat diperlakukan sebagai objek dari superclass,
tetapi tetap menjalankan versi metode yang di-override di subclass.
- Annotations:
Dalam Java, keyword @Override biasanya ditambahkan sebelum metode yang di-override
untuk memastikan bahwa metode tersebut memang merupakan overriding dari
superclass. Ini membantu menghindari kesalahan penulisan atau penamaan
yang mungkin tidak cocok dengan metode di superclass.
Manfaat Overriding:
- Spesialisasi
Metode untuk Subclass: Subclass dapat memiliki metode dengan perilaku
khusus, yang mungkin tidak relevan bagi superclass.
- Pemanfaatan
Polimorfisme: Memungkinkan satu metode yang sama untuk berperilaku
berbeda sesuai tipe objek yang memanggilnya.
- Modular
dan Extensible: Dengan overriding, kode menjadi modular karena kita
tidak perlu memodifikasi kode superclass untuk mengubah perilaku dalam
subclass.
Contoh Studi Kasus Overriding: Sistem Pengelolaan
Kendaraan di Rental Mobil
Misalkan kita mengelola sistem rental mobil yang mendukung
beberapa jenis kendaraan seperti mobil biasa, truk, dan kendaraan mewah. Setiap
kendaraan memiliki cara yang berbeda dalam menghitung tarif sewa berdasarkan
jenisnya. Kita bisa menggunakan overriding untuk menyediakan metode calculateRentalCost()
yang spesifik untuk setiap jenis kendaraan.
1. Membuat Superclass Vehicle
java
class Vehicle {
protected double
baseRate;
this.baseRate
= baseRate;
}
public double calculateRentalCost(int
days) {
return
baseRate * days;
}
}
- Vehicle
memiliki metode calculateRentalCost() yang menghitung tarif berdasarkan
tarif dasar (baseRate) dikalikan dengan jumlah hari (days).
- Subclass
nanti akan meng-override metode ini untuk menyesuaikan tarif sesuai
jenis kendaraannya.
2. Menggunakan Overriding dalam Subclass Car, Truck, dan LuxuryCar
java
class Car extends Vehicle {
public Car(double
baseRate) {
super(baseRate);
}
public double calculateRentalCost(int
days) {
// Mobil biasa
tanpa biaya tambahan
return
baseRate * days;
}
}
class Truck extends Vehicle {
public Truck(double
baseRate) {
super(baseRate);
}
public double calculateRentalCost(int
days) {
// Truk
memiliki biaya tambahan untuk penggunaan berat
double heavyDutyFee
= 50.0;
return
(baseRate * days) + heavyDutyFee;
}
}
class LuxuryCar extends Vehicle {
public LuxuryCar(double
baseRate) {
super(baseRate);
}
public double calculateRentalCost(int
days) {
// Kendaraan
mewah memiliki tarif tambahan untuk layanan premium
double luxuryFee
= 100.0;
return
(baseRate * days) + luxuryFee;
}
}
- Car:
calculateRentalCost() menggunakan tarif dasar saja tanpa tambahan.
- Truck:
calculateRentalCost() menambahkan biaya heavyDutyFee karena truk
memerlukan biaya tambahan untuk penggunaan berat.
- LuxuryCar:
calculateRentalCost() menambahkan luxuryFee untuk layanan premium.
3. Menggunakan Polimorfisme dengan Overriding
Karena Car, Truck, dan LuxuryCar adalah subclass dari Vehicle,
kita bisa menggunakan polimorfisme untuk memanggil calculateRentalCost() pada
objek dari tipe Vehicle namun hasilnya sesuai dengan tipe objek aslinya.
java
public class Main {
public static void
main(String[] args) {
Vehicle myCar =
new Car(200);
Vehicle myTruck
= new Truck(300);
Vehicle myLuxuryCar
= new LuxuryCar(500);
// Output: Car
rental cost for 3 days: 600.0
// Output:
Truck rental cost for 3 days: 950.0
// Output:
Luxury Car rental cost for 3 days: 1600.0
}
}
Penjelasan:
Pada contoh ini:
- myCar.calculateRentalCost(rentalDays)
memanggil versi metode calculateRentalCost() di kelas Car, yang hanya
mengalikan tarif dasar dengan jumlah hari.
- myTruck.calculateRentalCost(rentalDays)
memanggil versi calculateRentalCost() di Truck, yang menambahkan heavyDutyFee.
- myLuxuryCar.calculateRentalCost(rentalDays)
memanggil versi calculateRentalCost() di LuxuryCar, yang menambahkan luxuryFee.
Materi
Sourcecode
Pengumpulan Tugas
Form Monitoring Tugas
Latihan :
Buatlah sistem reservasi tiket pesawat
yang mendukung tiga jenis kelas penerbangan:
- Ekonomi
- Bisnis
- First
Class
Setiap kelas penerbangan memiliki perhitungan tarif yang
berbeda-beda. Selain itu, setiap kelas juga memiliki kebijakan khusus, seperti
fasilitas tambahan, batas bagasi, atau layanan yang disediakan.
Struktur Kelas:
- Kelas
Ticket adalah kelas dasar atau superclass yang berfungsi sebagai kelas
umum untuk semua jenis reservasi tiket pesawat.
- Kelas
EconomyTicket, BusinessTicket, dan FirstClassTicket adalah subclass yang
mewarisi dari Ticket. Setiap subclass mengoverride metode calculateFare()
untuk menentukan tarif sesuai kelas penerbangan.
- Ketentuan
Diskon ticket
· EconomyTicket memberikan diskon 10%.
· BusinessTicket menambahkan biaya 25%.
· FirstClassTicket menambahkan biaya 50%.