• Tidak ada hasil yang ditemukan

BAB 7 OVERLOADING DAN OVERRIDING

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB 7 OVERLOADING DAN OVERRIDING"

Copied!
13
0
0

Teks penuh

(1)

BAB  7  OVERLOADING  DAN  OVERRIDING  

 

 

Tujuan:  

Setelah  mengikuti  matakuliah  ini,  diharapkan  mahasiswa  mampu  untuk   menjelaskan  konsep  dari  overloading  dan  overriding  method,  serta   mengimplementasikannya  dalam  Java  

(2)

7.1.  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); }

(3)

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>

7.2.  Overriding  

Overriding     adalah     suatu     keadaan     dimana     method     pada     subclass     menolak   method       pada       parent     class-­‐ny.   Dalam   artian,   subklas   sebenarnya   sudah  mewarisi  method  yang  diturunkan  dari  superklasnya,  akantetapi  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.   Akantetapi   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  

(4)

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,   akantetapi   dengan  isi  yang  berbeda  dengan  isi  method  yang  dimiliki  oleh  superklas.  Method   yang   terkena   override   y a i t u   y a n g   a d a   d i   d a l a m   s u p e r k l a s   (overridden   method)   diharuskan   tidak    boleh  mempunyai   modifier

yang     lebih     luas  aksesnya    dari  method    yang  meng-­‐override  yaitu  yang  di   subklas  (overriding  method).  

(5)

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 + tunjangan));

} }

6. Lengkapi  klas  Staff  sebagai  berikut     package latihan5; Pegawai +nip: String +nama: String +gaji: int +hitungGaji(): int Dosen +tunjangan: int +hitungGaji(): int Staff +hitungGaji(): int

(6)

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. Jlankan  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.

(7)

BAB  8  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

(8)

8.1.  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.    

8.2.  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

(9)

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.   Akantetapi   ketika   diakses   method   Info   ()   dari   objek   tes,   yang   muncul   adalah   method  Info()  dari  subklas,  bukan  method  Info()  dari  superklas.      

 

8.3.  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);

} }

8.4.  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 { …

(10)

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); } }

8.5.  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… }

(11)

Dari   diagram   klas   yang   digunakan   contoh   dalam   penbahasan   inheritance,   kita   gunakan  lagi  sebagai  conth  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;

Pegawai +nip: String +nama: String +gaji: int +hitungGaji(): int Dosen +tunjangan: int +hitungGaji(): int Staff +hitungGaji(): int

(12)

@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

(13)

Referensi

Dokumen terkait

Berkaitan dengan tugas menetapkan kegiatan dan jadwal acara rapat DPRD, Panitia Musyawarah menetapkan acara DPRD untuk satu masa sidang atau sebagian dari suatu masa

Tentu saja norma semacam itu bertentangan dengan UU Pemda yang secara tegas mengatakan bahwa daerah yang memiliki wilayah laut diberikan kewenangan untuk

Peneliti pada akhirnya mengasumsikan kemungkinan besar untuk penderita ISPA pada balita dikarenakan memiliki status gizi kurang sehingga akan memperlemah daya tahan

Topik ini membahas permasalah kecenderungan orientasi jurnalisme Pers Indonesia dalam menghadapi fenonema ekonomi dalam masyarakat, berkaitan dengan kekuataan permodalan dalam

Spesies dengan produksi serasah daun terbesar adalah Bruguiera cylindrica, yakni sebesar 1,72 g.m - Gambar 5 Hubungan antara musim (frekuensi hujan) dan produksi

Jenis penelitian ini tergolong Kualitatif dengan pendekatan penelitian yang digunakan adalah: yuridis sosiologis, adapun sumber data penelitian ini bersumber dari

Efek pencegahan dari pidana yang dijatuhkan diharapkan terjadi setelah pemidanaan dilakukan, sehingga terpidana tidak akan lagi melakukan kejahatan serupa di masa datang.Teori

Tujuan Program Keahlian Seni Musik Non Klasik (Keyboard) secara umum mengacu pada isi Undang Undang Sistem Pendidikan Nasional (UU SPN) pasal 3 mengenai Tujuan Pendidikan Nasional