Penerapan Overriding dan Overloading

204 Rekayasa Perangkat Lunak memanggil method hitungLuas, getTinggi dan hitung volume System.out.printlnLuas salah satu sisi = + kotak.hitungLuas; System.out.printlnTinggi kotak = + kotak.getTinggi; System.out.printlnVolume kotak = + kotak.hitungVolume; } } Kelas Bangun di atas adalah superclass sedangkan Box adalah subclass. Pada default constructor Bangun, nilai panjang dan lebar diinisialisasi dengan nilai 0. Perhatikan didepan deklarasi variabel panjang dan lebar pada kelas Bangun dicantumkan kata kunci protected yang berarti kelas turunan dari Bangun tetap dapat mengakses nilai dari variabel tersebut namun yang tidak memiliki hubungan turunan tidak dapat mengaksesnya. Pada Box yang merupakan subclass ditambahkan satu variabel yaitu tinggi dengan tambahan kata kunci private diikuti tipe datanya. Private menunjukkan bahwa variabel tinggi hanya bisa diakses didalam kelas Box. Lawan dari private adalah public, yang berarti dapat diakses oleh siapapun dan dari manapun. Pada kelas Box juga kita tambahkan satu method yaitu hitungVolume. Pada contoh 8.29 di atas obyek yang kita buat yaitu kotak, merupakan hasil instansiasi dari kelas Box. Oleh karena kelas Box adalah turunan dari kelas Bangun, maka kita dapat mengakses method hitungLuas yang merupakan warisan dari kelas Bangun. Tentu saja kita bisa mengakses method getTinggi dan hitungVolume yang merupakan method pada kelas Box. Kalau kita eksekusi program di atas, maka akan tampak seperti berikut. Gambar 8.15. Hasil eksekusi program kelas Bangun dan Box.

8.8.3. 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 Di unduh dari : Bukupaket.com Rekayasa Perangkat Lunak 205 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.printlnMethod 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 mainString[] args { Segitiga s; instansiasi obyek s = new Segitiga6, 8; memanggil method hitungLuas dari subclass Segitiga System.out.printlnLuas 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. Di unduh dari : Bukupaket.com 206 Rekayasa Perangkat Lunak public double hitungLuas { super.hitungLuas; System.out.println; double luas = 0.5 alas tinggi; return luas; } Jalankan program, maka kalian akan mendapatkan hasil seperti Gambar 8.17. Bandingkan dengan hasil eksekusi sebelumnya Gambar 8.16 Gambar 8.16. Hasil eksekusi overriding pada method hitungLuas. Gambar 8.17. Hasil eksekusi overriding dan pernyataan super. 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.printlnMethod belum terdefinisi; return 0; } } Di unduh dari : Bukupaket.com Rekayasa Perangkat Lunak 207 class BujurSangkar extends Bangun { private double sisi; overload method hitungLuas public double hitungLuasdouble sisi { double luas = sisi sisi; return luas; } } class overloadBangun { public static void mainString[] args { BujurSangkar b; instansiasi obyek b = new BujurSangkar; memanggil method hitungLuas dari subclass BujurSangkar System.out.printlnLuas BujurSangkar = + b.hitungLuas6; } } Perhatikan pada kode di atas, method hitungLuas pada kelas bangun tidak mempunyai argumen sedangkan pada kelas BujurSangkar mempunyai argumen yaitu sisi. I nilah yang disebut sebagai overloading. Bandingkan dengan contoh overriding pada contoh 8.29 dan 8.30.

8.8.4. Penerapan Polymorphism