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:
Saat dieksekusi dan dijalankan kedua berkas ini akan menghasilkan:
//berkas : CarConstructor.javapublic 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();
} }
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:
Yang membedakan ketiga konstruktor diatas adalah jumlah dan tipe data
parameter.
Overloading Terhadap Metode
Selain dapat dilakukan pada konstruktor Overloading juga dapat dilakukan
terhadap metode non – konstruktor.
//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); } } //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();
} }
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:
//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")); }
}
C:\Program> javac ObjekKuadrat.java
C:\Program> java ObjekKuadrat
625.0
625
625.0
//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>
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 : 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();
} }
Jika kedua kode tersebut dieksekusi maka akan menghasilkan tampilan
seperti berikut:
Hidding
//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();
} }
C:\Program> javac SubKelas.java
C:\Program> java SubKelas
Di cetak di sub kelas
C:\Program >
//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();
} }