Penerapan overriding dan overloading
Kadang-kadang, ketika kita membuat method di dalam subclass, kita ingin membuat method dengan nama yang sama dengan method pada superclass namun dengan penerapan yang berbeda. Sebagai contoh pada kelas Bangun pada contoh 8.29, tersedia method hitungLuas(). Misalnya kita ingin membuat subclass Segitiga yang merupakan turunan dari kelas Bangun. Kemudian kita ingin membuat method hitungLuas() yang penerapannya tidak lagi luas = panjang x lebar tetapi dengan penerapan luas = 0.5 x alas x tinggi. Pada kondisi ini method hitungLuas() dari superclass akan tertutupi oleh method pada subclass. Hal seperti ini biasa disebut sebagai overriding. Perhatikan contoh berikut.
Contoh 8.30. Penerapan overriding.
class Bangun {
// method umum
public double hitungLuas() {
System.out.println("Method belum terdefinisi");
Return 0;
}
}
class Segitiga extends Bangun {
private double alas;
private double tinggi;
Segitiga (int a, int t) {
alas = a;
tinggi = t;
}
// overriding method hitungLuas()
public double hitungLuas() {
double luas = 0.5 * alas * tinggi;
return luas;
}
}
class overridingBangun {
public static void main(String[] args) {
Segitiga s;
// instansiasi obyek
s = new Segitiga(6, 8);
// memanggil method hitungLuas() dari subclass Segitiga
System.out.println("Luas segitiga = " +
s.hitungLuas());
}
}
Pada contoh di atas, kelas Bangun sebagai superclass mempunyai method hitungLuas(), tetapi belum kita definisikan isi methodnya. Pada kelas Segitiga, method hitungLuas() ini kita overriding untuk mendapatkan nilai luas segitiga. Pada eksekusi program di atas, yang dijalankan adalah method hitungLuas() yang ada pada subclass Segitiga. Hasil dari eksekusi program akan tampak seperti pada gambar 8.16. Apabila kita ingin tetap menjalankan method hitungLuas() yang ada pada kelas Bangun, kita dapat memanggil dengan kata kunci super. Rubahlah method hitungLuas() pada kelas Segitiga dengan kode berikut.
public double hitungLuas() {
super.hitungLuas();
System.out.println();
double luas = 0.5 * alas * tinggi;
return luas;
}
Jalankan program, maka kita akan mendapatkan hasil seperti gambar 8.17. Bandingkan dengan hasil eksekusi sebelumnya (gambar 8.16)
Overloading memiliki kesamaan dengan overriding dalam hal menyembunyikan method dari superclass. Tetapi memiliki perbedaan, yaitu: pada overloading methodnya memiliki nama yang sama dengan method pada kelas induk, tetapi memiliki daftar argument dan implementasi yang berbeda. Sedangkan overriding, method mempunyai nama dan daftar argumen yang sama dengan kelas induk dan hanya implementasinya yang berbeda. Perhatikan contoh berikut.
Contoh 8.31. Contoh overloading.
class Bangun {
// method umum
public double hitungLuas() {
System.out.println("Method belum terdefinisi");
return 0;
}
}
class BujurSangkar extends Bangun {
private double sisi;
// overload method hitungLuas()
public double hitungLuas(double sisi) {
double luas = sisi * sisi;
return luas;
}
}
class overloadBangun {
public static void main(String[] args) {
BujurSangkar b;
// instansiasi obyek
b = new BujurSangkar();
// memanggil method hitungLuas() dari subclass
BujurSangkar
System.out.println("Luas BujurSangkar = " +
b.hitungLuas(6));
}
}
Perhatikan pada kode di atas, method hitungLuas() pada kelas bangun tidak mempunyai argumen sedangkan pada kelas BujurSangkar mempunyai argumen yaitu sisi. Inilah yang disebut sebagai overloading. Bandingkan dengan contoh overriding pada contoh 8.29 dan 8.30.
Halaman Terkait:
| Aplikasi pemrograman berorientasi obyek dengan java | Pembuatan kelas | Penerapan inheritance | Penerapan polymorphism | Menggunakan paket dan interface |
Post a Comment