Overloading
Overloading adalah
suatu keadaan dimana beberapa method sekaligus dapat mempunyai nama yang sama,
akan tetapi mempunyai fungsionalitas yang berbeda. Contoh penggunaan
overloading dilihat dibawah ini:
Gambar(int t1)
1 parameter
titik, untuk menggambar titik
Gambar(int
t1,int t2)
2 parameter
titik, untuk menggambar garis
Gambar(int t1,int t2,int t3)
3 parameter
titik, untuk menggambar segitiga
Gambar(int t1,int t2,int t3,int
t4)
4 parameter
titik, untuk menggambar persegi empat
Overloading ini
dapat terjadi pada class yang sama atau pada suatu parent class dan
subclass--nya. Overloading mempunyai ciri--ciri sebagai berikut:
1. Nama
method harus sama
2. Daftar
parameter harus berbeda
3. Return
type boleh sama, juga boleh berbeda
import java.awt.Point;
public class Segiempat {
int x1 = 0;
int y1 = 0;
int x2 = 0;
int y2 = 0;
public void buatSegiempat(int x1, int y1, int x2, int y2)
{
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public void buatSegiempat(Point topLeft, Point
bottomRight) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = bottomRight.x;
y2 = bottomRight.y;
}
public void buatSegiempat(Point topLeft, int w, int h) {
x1 = topLeft.x;
y1 = topLeft.y;
x2 = (x1 + w);
y2 = (y1 + h);
}
void cetakSegiempat(){
System.out.print("Segiempat: <" +
x1 + ", " + y1);
System.out.println(", " + x2 + ",
" + y2 + ">");
}
public static void main(String[] arguments) {
Segiempat rect = new Segiempat();
System.out.println("Buat segiempat dengan
koordinat
(25,25) dan (50,50)");
rect.buatSegiempat(25, 25, 50, 50);
rect.cetakSegiempat();
System.out.println();
System.out.println("Buat segiempat dengan
point (10,10)
dan point (20,20):");
rect.buatSegiempat(new Point(10,10), new
Point(20,20));
rect.cetakSegiempat();
System.out.println();
System.out.print("Buat segiempat dengan 1
point (10,10),
koodinat (50,50)");
rect.buatSegiempat(new Point(10,10), 50, 50);
rect.cetakSegiempat();
}
}
Ketika program
tersebut dijalankan, akan tampak hasil seperti dibawah ini :
Buat segiempat
dengan koordinat (25,25) dan (50,50)
Segiempat: <25,
25, 50, 50>
Buat segiempat
dengan point (10,10) dan point
(20,20): Segiempat:
<10, 10, 20, 20>
Buat segiempat
dengan 1 point (10,10), koodinat
(50,50)Segiempat:<10,
10, 60, 60>
Overriding
Overriding adalah suatu keadaan dimana method pada subclass
menolak method pada parent class-‐nya. Dalam artian, subklas sebenarnya sudah mewarisi method yang
diturunkan dari superklasnya, akan tetapi subklas berusaha untuk memodifikasi
isi dari method yang sudah diwarisi tersebut dengan operasi atau isi yang lebih
spesifik untuknya sendiri.
Sebagai contohnya, superklas Hewan mempunyai method bersuara().
Tentu saja ketika ada klas Kucing, Anjing dan Kambing juga mewarisi method
bersuara tersebut. Akan tetapi di masing-masing subklas, method bersuara
tersebut dideklarasikan kembali dan isinya dimodifikasi disesuaikan dengan
kebutuhan subklas tersebut. Overriding mempunyai ciri-ciri sebagai berikut :
1. Nama
method harus sama
2. Daftar
parameter harus sama
3. Return
type harus sama
Berikut
ini contoh terjadinya overriding dimana method info() pada
class Child meng—override method info() pada
class parent:
class Parent {
public void info() {
System.out.println(“Ini class Parent”);
}
}
class Child extends Parent {
public void Info() {
System.out.println(“Ini class Child”);
}
}
Contoh yang lain
class Hewan {
public String bersuara() {
return “suara hewan”;
}
}
class Anjing extends Hewan {
public String bersuara() {
return “hug..hug..”;
}
}
class Kucing extends Hewan {
public String bersuara() {
return “miaw..miaw..”;
}
}
class Kambing extends Hewan
{
public String bersuara() {
return “mbek..mbek..”;
}
}
Dari beberapa contoh di atas terlihat bahwa di subklas, dideklarasikan
kembali method yang sebenarnya sudah diwarisi
dari superklas, akan tetapi dengan isi yang berbeda dengan isi method yang dimiliki
oleh superklas. Method yang terkena override yaitu yang ada di dalam superklas
(overridden method) diharuskan tidak boleh mempunyai modifier yang lebih luas aksesnya
dari method yang meng-override yaitu yang di subklas (overriding method).
Perhatikan
gambar diagram klas berikut ini
![]() |
Dari
diagram klas tersebut dibuat program dengan langkah sebagai berikut:
1. Buka kembali project MyApp
2. Buat paket baru dengan nama
latihan5
3. Di dalam paket latihan5 buat
klas Pegawai, Dosen dan Staff serta Main
4. Lengkapi klas Pegawai sebagai
berikut :
package latihan5;
public class Pegawai {
public String nip, nama;
public int gaji;
public int hitungGaji(){
return gaji;
}
}
5. Lengkapi klas Dosen sebagai berikut :
package latihan5;
public class Dosen extends
Pegawai{
public int tunjangan;
@Override
public int hitungGaji(){
return (int) (gaji + tunjangan - 0.15 * (gaji + unjangan));
}
}
6. Lengkapi klas Staff sebagai berikut :
package latihan5;
public class Staff extends
Pegawai{
@Override
public int hitungGaji(){
float bonus = 0.2f*gaji;
return (int) (gaji + bonus - 0.10 * (gaji +
bonus));
}
}
7. Kemudian lengkapi klas Main
package latihan5;
public class Main {
public static void main(String[] arvg){
Dosen d = new Dosen();
d.nip = "1942191";
d.nama = "imam";
d.gaji = 2000000;
d.tunjangan = 200000;
System.out.println("Gaji total dosen
"+d.nama+" ="+d.hitungGaji());
Staff s = new Staff();
s.nip = "62555";
s.nama = "rozi";
s.gaji = 1500000;
System.out.println("Gaji total Staff
"+s.nama+" =
"+s.hitungGaji());
}
}
8. Jalankan klas Main dan akan muncul hasil sebagai berikut :
run:
Gaji total dosen imam = 1870000
Gaji total Staff rozi = 1620000
BUILD SUCCESSFUL (total time: 1 second)
9. Dari hasil yang muncl, terlihat bahwa ketika dipanggil
method hitungGaji () dari objek d dan s yang dijalankan adalah method hitungGaji
() yang ada di dalam klas Dosen dan Staff, bukan method hitungGaji () yang ada di
superklasnya atau klas Pegawai.
POLIMORFISME
Tujuan:
Setelah
menempuh matakuliah ini, diharapkan mahasiswa mampu mengerti konsep dan implementasi
dalam Java terkait dengan:
1.
Polimorfisme
2.
Virrtual Methid Invocation
3.
Polymorphic Arguments
4.
Pernyataan Instance Of
5. Casting
Object
- Polimorfisme
Polymorphism (polimorfisme) adalah kemampuan untuk mempunyai beberapa
bentuk class yang berbeda. Polimorfisme ini terjadi pada saat suatu obyek bertipe
parent class, akan tetapi pemanggilan constructornya melalui subclass. Misalnya
deklarasi pernyataan berikut ini:
Employee employee=new Manager();
dimana
Manager() adalah kontruktor pada class Manager yang merupakan subclass dari class
Employee.
-
Virtual Method Invocation
Virtual Method Invocation (VMI) bisa terjadi jika terjadi polimorfisme
dan overriding. Pada saat obyek yang sudah dibuat tersebut memanggil overridden
method pada parent class, kompiler Java akan melakukan invocation (pemanggilan)
terhadap overriding method pada subclass, dimana yang seharusnya dipanggil adalah
overridden method. Berikut contoh terjadinya VMI:
class Parent {
int x = 5;
public void Info() {
System.out.println(“Ini class Parent”);
}
}
class Child extends Parent
{
int x = 10;
public void Info() {
System.out.println(“Ini class Child”);
}
}
public class Tes {
public static void main(String args[]) {
Parent tes=new Child();
System.out.println(“Nilai
x = “ + tes.x);
tes.Info();
}
}
Hasil dari running program
diatas adalah sebagai berikut:
Nilai x = 5
Ini class Child
Dari
hasil di atas terlihat bahwa ketika diakses atribut x dari objek tes, maka yang
muncul adalah nilai x dari superklas, bukan atribut x dari subklas. Akan tetapi
ketika diakses method Info () dari objek tes, yang muncul adalah method Info() dari
subklas, bukan method Info() dari superklas.
-
Polymorphic Arguments
Polymorphic
arguments adalah tipe suatu parameter yang menerima suatu nilai yang bertipe subclass--‐nya. Berikut contoh dari polymorphics
arguments:
class Pegawai {
…
}
class Manajer extends
Pegawai {
…
}
public class Tes {
public static void Proses(Pegawai peg) {
…
}
public static void main(String args[]) {
Manajer man = new Manajer();
Proses(man);
}
}
-
Instance Of
Pernyataan instanceof sangat berguna untuk mengetahui tipe asal dari
suatu polymorphic arguments. Untuk lebih jelasnya, misalnya dari contoh program
sebelumnya, kita sedikit membuat modifikasi pada class Tes dan ditambah sebuah class
baru Kurir, seperti yang tampak dibawah ini:
…
class Kurir extends
Pegawai {
…
}
public class Tes {
public static void Proses(Pegawai peg) {
if (peg instanceof Manajer) {
…lakukan tugas-tugas manajer…
} else if (peg instanceof Kurir) {
…lakukan tugas-tugas kurir…
}
else
{
…lakukan tugas-tugas lainnya…
}
}
public static void
main(String args[]) {
Manajer man = new Manajer();
Kurir kur = new Kurir();
Proses(man);
Proses(kur);
}
}
-
Casting Objects
Seringkali pemakaian instanceof diikuti dengan casting object dari
tipe parameter ke tipe asal. Misalkan saja program kita sebelumnya. Pada saat kita
sudah melakukan instanceof dari tipe Manajer, kita dapat melakukan casting object
ke tipe asalnya, yaitu Manajer. Caranya adalah seperti berikut:
…
if (peg instanceof
Manajer)
{ Manajer man =
(Manajer) peg;
…lakukan tugas-tugas manajer…
}
…
Dari diagram klas yang digunakan contoh dalam penbahasan inheritance,
kita gunakan lagi sebagai contoh dalam bab ini. Diagram klasnya seperti tampil dalam
gambar di bawah ini :
![]() |
Langkah
untuk simulasinya adalah sebagai berikut :
1.
Buka kembali project MyOop
2.
Buat paket latihan6
3.
Copy klas Pegawai, Dosen dan Staff dari paket latihan5, kemudian paste ke dalam
paket latihan6.
4.
Modifikasi klas Dosen sebagai berikut
package latihan6;
public class Dosen extends
Pegawai{
public int tunjangan;
public int gajiNgajar;
@Override
public int hitungGaji(){
return (int) (gaji + tunjangan - 0.15 *
(gaji + tunjangan));
}
public int getGajiNgajar(){
return gajiNgajar;
}
}
5. Modifikasi klas Staff
package latihan6;
public class Staff extends
Pegawai{
public int gajiLembur;
@Override
public int hitungGaji(){
float bonus = 0.2f*gaji;
return (int) (gaji + bonus - 0.10 * (gaji +
bonus));
}
public int getGajiLembur() {
return gajiLembur;
}
}
6. Dalam paket latihan6, buat klas Main dan isikan kode program seperti
di bawah ini :
package latihan6;
public class Main {
public static int
ambilGaji(Pegawai peg) {//polimorfic argument
//virtual method invocation
int gaji = peg.hitungGaji();
if (peg instanceof Dosen) {
Dosen d = (Dosen) peg;//casting objek
gaji += d.getGajiNgajar();
} else if (peg instanceof Staff) {
Staff s = (Staff) peg;
gaji += s.getGajiLembur();
}
return gaji;
}
public static void
main(String args[]) {
Dosen d = new Dosen();
d.nip = "1942191";
d.nama = "imam";
d.gaji = 2000000;
d.tunjangan = 200000;
d.gajiNgajar = 500000;
System.out.println("Gaji total dosen
"+d.nama+" =
"+ambilGaji(d));
Staff s = new Staff();
s.nip = "62555";
s.nama = "rozi";
s.gaji = 1500000;
s.gajiLembur = 500000;
System.out.println("Gaji total Staff "+s.nama+"
=
"+ambilGaji(s));
}
}
7. Jalankan klas Main dan hasilnya
akan keluar sebagai berikut
run:
Gaji total dosen imam = 2370000
Gaji total Staff rozi = 2120000
BUILD SUCCESSFUL (total time: 0 seconds)




0 komentar:
Posting Komentar