Konstruktor dan Polimorfisme Konstruktor Konstruktor merupakan metode yang digunakan untuk memberi nilai awal pada objek saat pertama kali objek tersebut dibuat. Konstruktor akan otomatis dibuat saat kata kunci new dipanggil. Terdapat beberapa karakteristik untuk penamaan konstruktor: 1. Nama konstruktor sama dengan nama kelas 2. Tidak menggunakan kata kunci void 3. Tidak dapat mengembalikan nilai Berikt merupakan contoh kode untuk konstruktor: //berkas : CarConstructor.java public class CarConstructor { //atribut String color; int builtYear; //konstruktor dengan dua parameter public CarConstructor(String color, int builtYear){ this.color=color; this.builtYear=builtYear; } //metode void info(){ System.out.println("Color: " + color); System.out.println("Year: " + builtYear); } } //berkas : CarConstructorAction.java public class CarConstructorAction{ public static void main(String[] args){ //membuat objek myCar dan yourCar dengan nilai awal yang di set dengan konstruktor CarConstructor myCar = new CarConstructor("Merah", 2013); myCar.info(); CarConstructor yourCar = new CarConstructor("Biru", 1970); yourCar.info(); } }
Saat dieksekusi dan dijalankan kedua berkas ini akan menghasilkan: C:\Program> javac CarConstructorAction.java C:\Program> java CarConstructorAction Color: Merah Year: 2013 Color: Biru Year: 1970 C:\Program >
Polimorfisme Menurut kamus definisi polimorfisme yang mengacu pada prinsip dalam biologi adalah di mana suatu organisme atau spesies dapat memiliki berbagai bentuk atau tingkatan.
Prinsip ini juga dapat diterapkan untuk pemrograman berorientasi objek secara khusus disini adalah bahasa Java. Dalam Java subclass dari kelas dapat menentukan perilaku mereka sendiri yang unik dan namun dapat berbagi beberapa fungsi yang sama dari super kelas. Pendek kata sebuah objek dapat memiliki bentuk yang berbeda. Implementasi dari konsep polimorfisme yaitu: 1. Overloading : Mengunakan satu nama untuk tiap-tiap metode dengan parameter yang berbeda 2. Overriding: Terjadi ketika subkelas memiliki metode yang sama persis dengan metode yang ada pada super kelasnya. Polimorfisme - Overloading Overloading terjadi ketika terdapat minimal dua metode dengan nama yang sama tetapi memiliki jenis dan jumlah parameter yang berbeda. Hal ini dapat terjadi jika dua metode itu terdapat dalam satu kelas atau keduanya diwariskan, atau satu metode diwariskan dan satu metode dideklarasikan dalam kelas itu sendiri. Overloading Terhadap Konstruktor Merupakan suatu mekanisme untuk membuat berbagai macam konstruktor pada satu kelas. Berikut merupakan contoh kode overloading terhadap konstruktor yang terjadi dalam satu kelas yang sama:
//berkas : Bicycle.java public class Bicycle{ int speed; int gear; //konstruktor dengan parameter speed dan gear public Bicycle(int speed, int gear){ this.speed = speed; this.gear = gear; } //konstructor dengan parameter gear public Bicycle(int gear){ this.gear = gear; } //konstructor tanpa parameter public Bicycle(){ } //metode void info(){ System.out.println("Speed: " + this.speed); System.out.println("Gear: " + this.gear); } }
Yang membedakan ketiga konstruktor diatas adalah jumlah dan tipe data parameter. //berkas : BicycleOverloading.java public class BicycleOverloading{ public static void main(String[] args){ //menggunakan konstruktor dengan parameter speed dan gear Bicycle myBike = new Bicycle(10, 1); myBike.info(); //menggunakan konstruktor dengan parameter gear Bicycle yourBike = new Bicycle(1); yourBike.info(); //menggunakan konstruktor tanpa parameter Bicycle nnBike = new Bicycle(); nnBike.info(); } }
Overloading Terhadap Metode Selain dapat dilakukan pada konstruktor Overloading juga dapat dilakukan terhadap metode non – konstruktor.
//berkas : KelasKuadrat.java public class KelasKuadrat{ //metode public double kuadrat(double input){ return input*input; } public int kuadrat(int input){ return input*input; } public double kuadrat(String input){ double bilangan; bilangan= Double.valueOf(input).doubleValue(); //mengubah nilai string menjadi double return bilangan*bilangan; } } //berkas : ObjekKuadrat.java public class ObjekKuadrat { public static void main(String[] args) { KelasKuadrat pangkatDua = new KelasKuadrat(); System.out.println(pangkatDua.kuadrat(25.0)); System.out.println(pangkatDua.kuadrat(25)); System.out.println(pangkatDua.kuadrat("25")); } }
Pada kode diatas terdapat tiga buah metode yang sama dengan jumlah parameter yang sama akan tetapi berbeda tipe data saja, hal tersebut merupakan salah satu bentuk overloading. Jika kedua kode diatas dieksekusi maka akan mendapatkan hasil berikut: C:\Program> javac ObjekKuadrat.java C:\Program> java ObjekKuadrat 625.0 625 625.0 C:\Program>
//berkas : KelasSiswa.java public class KelasSiswa { // Atribut String nama; String nim; // Metode public void setData(String nama, String nim) { this.nama = nama; this.nim = nim; } public void setData(String nama) { this.nama = nama; } public void cetakData() { System.out.println("Nim siswa = " + nim); System.out.println("Nama siswa = " + nama); } } //berkas : KegiatanSiswa.java public class KegiatanSiswa extends KelasSiswa { // Atribut String kegiatan; // Metode public void setKegiatan(String kegiatan) { this.kegiatan = kegiatan; } public void cetakKegiatan() { System.out.println("Kegiatan siswa = " + kegiatan); } //Metode utama public static void main(String[] args) { KegiatanSiswa kSiswa1 = new KegiatanSiswa(); kSiswa1.setData("Boni Mangunjiwo","A11.2013.00001"); kSiswa1.setKegiatan("DNCC"); kSiswa1.cetakData(); kSiswa1.cetakKegiatan(); KegiatanSiswa kSiswa2 = new KegiatanSiswa(); kSiswa2.setData("Rubi Arjuna"); kSiswa2.setKegiatan("Basket"); kSiswa2.cetakData(); kSiswa2.cetakKegiatan(); } }
C:\Program> javac KegiatanSiswa.java C:\Program> java KegiatanSiswa Nim siswa = A11.2013.00001 Nama siswa = Boni Mangunjiwo Kegiatan siswa = DNCC Nim siswa = null Nama siswa = Rubi Arjuna Kegiatan siswa = Basket C:\Program>
//berkas : KelasSiswa2.java public class KelasSiswa2 { // Atribut String nama; String nim; // Metode public void setDataSiswa(String nama, String nim) { this.nama = nama; this.nim = nim; } public void cetakDataSiswa() { System.out.println("Nim siswa = " + nim); System.out.println("Nama siswa = " + nama); } }
//berkas : KegiatanSiswa2.java public class KegiatanSiswa2 extends KelasSiswa2 { // Atribut String kegiatan; // Metode public void setDataSiswa(String nama, String nim, String kegiatan) { this.nama = nama; this.nim = nim; this.kegiatan = kegiatan; } public void cetakDataKegitanSiswa () { System.out.println("Nim siswa = " + nim); System.out.println("Nama siswa = " + nama); System.out.println("Kegiatan siswa = " + kegiatan); } //Metode utama public static void main(String[] args) { KegiatanSiswa2 kSiswa1 = new KegiatanSiswa2(); kSiswa1.setDataSiswa("Milka Susanti","A11.2013.00001","Paduan Suara"); kSiswa1. cetakDataKegitanSiswa(); KegiatanSiswa2 kSiswa2 = new KegiatanSiswa2(); kSiswa2.setDataSiswa("Putri Rahayu","A11.2013.00001"); kSiswa2.cetakDataSiswa(); } }
Polimorfisme – Overriding Keuntungan dari melakukan overriding metode adalah ketika sebuah sub kelas mewarisi metode dari super kelas, dan metode tersebut masih terbatas penggunaannya, sub kelas dapat memodifikasi metode tersebut ketika dibutuhkan. Ciri dari overriding adalah memiliki nama metode, tipe metode, jumlah parameter, nama parameter, tipe parameter yang sama dengan metode yang akan di overide. Perhatikan contoh kode berikut ini:
//berkas : SuperKelas.java public class SuperKelas { public void metodeCetak() { System.out.println("Di cetak di super kelas "); } } //berkas : SubKelas.java public class SubKelas extends SuperKelas { // override metodeCetak in Superclass public void metodeCetak() { System.out.println("Di cetak di sub kelas "); } public static void main(String[] args) { SubKelas s = new SubKelas(); s.metodeCetak(); } }
Jika kedua kode tersebut dieksekusi maka akan menghasilkan tampilan seperti berikut: C:\Program> javac SubKelas.java C:\Program> java SubKelas Di cetak di sub kelas C:\Program > Hidding //berkas : Animal.java public class Animal { //metode kelas public static void testClassMethod() { System.out.println("The class" + " method in Animal."); } //metode instan public void testInstanceMethod() { System.out.println("The instance " + " method in Animal."); } }
//berkas : Cat.java public class Cat extends Animal { //metode kelas Cat (sub kelas) memiliki kesamaan dengan metode kelas Animal (super // kelas) sehinga menyembunyikan metode kelas Animal (super kelas) public static void testClassMethod() { System.out.println("The class method" + " in Cat."); } //metode instan public void testInstanceMethod() { System.out.println("The instance method" + " in Cat."); } public static void main(String[] args) { Cat myCat = new Cat(); Animal myAnimal = myCat; Animal.testClassMethod(); //memaggil metode kelas pada super kelas myAnimal.testInstanceMethod(); } }
C:\Program> javac Cat.java C:\Program> java Cat The class method in Animal. The instance method in Cat. C:\Program >
Sumber dan Referensi: Dasar Pemrograman Java 2, Abdul kadir, hal 160-168 http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html http://docs.oracle.com/javase/tutorial/java/IandI/override.html