MODUL X,PBO 1

PEWARISAN SIFAT BAGIAN 2
 

TUJUAN:
·        Mahasiswamampu melakukan pemanggilan konstruktor superclass
·        Mahasiswa mampu meng-Overriding method
TEORI SINGKAT:
Keyword super dipanggil ketika kita akanmenciptakan kelas dari subclass maka kelas induk akan dipanggil dengan sebutansuper.
Overriding atau overloading dalam subclassdegan nama dan parameter yang sama, serta return type yang sama dengan yang adadalam superclass sehingga akan menimpa method pada superclass. Akan tetapisubclass masih diperkenankan untuk mewarisi sifat dari superclass yang cukupdekat (setipe) untuk kemudian memodifikasi sesuai perilaku yang diinginkan.
PELAKSANAAN PRAKTIKUM:
Listing program 1. Titik.java
public classTitik{
  private int x;
  private int y;
//konstruktortanpa argumen
  public Titik(){
       System.out.println(“KonstruktorTitik tanpa argumen”);
       x=0;
       y=0;
  }
//Konstruktordengan argumen x dan y
  public Titik(int x, int y){
  System.out.println(“Konstruktor Titikdengan Argumen”);
       this.x=x;
       this.y=y;
  }
//set kordinatorTitik: x dan y
  public void setKoordinat(int xx, int yy){
       x=xx;
       y=yy;
  }
//ambil koordinatx
  public int getX(){
       return x;
  }
//ambil koordinaty
  public int getY(){
       return y;
  }
//Cetak ke layar
  public void cetak(){
       System.out.println(“X = ” + x +”, y = “+ y);
  }
}
Pada kelas titik di atas kita mendefinisikan konstruktor yaitu sebuahperintah untuk mengkonstruksi suatu variabel. Method yang bersifat konstruktorini berfungsi pada saat pemanggilan untuk mendefinisikan apakah pemanggilantersebut menggunakan parameter atau tidak. Jika tidak menggunakan parameter makasecara otomatis java akan menggunakan variabel-variabel yang terdifinisi darikonstruktor non parametrik, sedangkan apabila pada saat pemanggilan kitamenerakan parameter maka secara otomatis akan menggunakan variabel yangterdifinisi dari konstruktor dengan parameter.
Namun kita juga dapat melakukan perubahan terhadap value dari variabeltersebut tidak dengan konstruktor tetapi menggunakan method setKoordinat dimanamethod tersebut menggunakan parameter int xx dan int yy untuk mengisikanvariabel x dan y sebagaimana terdifinisi pada method getter getX dan getY.Untuk kemudian masing-masing dimasukkan ke variabel x dan y dengan pernyataan returnvalue. Inilah yang kemudian pada saat method cetak dipanggil maka akanmengeluarkan nilai variabel x dan y sebagaimana terdifinisi pada konstruktoratau mungkin setelah dilakukan perubahan pada saat method setKoordinatdipanggil.
Kelas Lingkaran
//Lingkaranmewarisi Titik
public classLingkaran extends Titik{
protected doubleradius;
//Konstruktortanpa argumen
publicLingkaran(){
  super();
  radius=0.0;
  }
//Konstruktorargumen radius
publicLingkaran(int x, int y, double rad){
  super(x,y);
  setRadius(rad);
  }
//set radius dariLingkaran
  public void setRadius(double rad){
       radius=(rad>=0.0 ? rad :0.0);
  }
//ambil radiusdari Lingkaran
  public double getRadius(){
       return radius;
  }
//hitung luasLingkaran
  public double luas(){
       return Math.PI * radius * radius;
  }
//cetak hasil kelayar
  public void cetakHasil(){
       System.out.println(“Pusat  = [“+getX() +”,”+getY()+”]”);
       System.out.println(“Radius =”+radius);
       System.out.println(“Luas   = “+luas());
  }
      }
Listing kelas Lingkaran pada programLingkaran.java ini merupakan kelas turunan dari kelas Titik. Ciri dari kelasturunan adalah adanya statemen extends (bagian dari) kelas yang disebutnya,yaitu kelas Titik. Dengan mengextends superclasskita dapat mengambil variabel ataupun method yang sudah terdifinisi pada kelasinduknya. Suatu yang diperbolehkan dalam kelas adalah memunculkan konstruktorbaik dengan parameter maupun tanpa menggunakan parameter. Di dalam konstruktoranak kelas dapat mengambil variabel dari induk kelas dengan kata super. Padalisting di atas kita tidak mendefinisikan variabel x dan y dan hanya memasukkanradius sebagai sebuah variabel. Tetapi variabel x dan variabel y tetap dapatdipanggil karena variabel x dan y tersebut diambilkan dari kelas Titik sebagaikelas induk/superclassnya.
Sebagai contoh dua pernyataan di dalam konstruktorLingkaran yang menggunakan parameter, disebut super(x,y) artinya padakonstruktor itu java diminta untuk meload variabel x dan y dari superkelasnyayaitu Titik. Hal tersebut juga dilakukan untuk mendevinisikan variabel radiusdengan memanggil method setRadius(rad) dari konstruktor Lingkaran. Artinyanilai radius diambilkan dari nilai radius yang berada pada kelas Lingkaran inisendiri.
Pada method setRadius nilai radius ditentukan olehbesarnya nilai rad yang dimasukkan sebagai parameter, namun apabila nilai radyang dimasukkan kurang dari nol maka dengan sendirinya nilai radius akandidevinisikan sebagai 0.0. Kalau radius bernilai negatif maka tidak akanmungkin luas lingkaran yang diperoleh dari perkalian radius dan phi bernilainegatif. Oleh karena itu dibuat rumus radius=rad>=0.0 ? rad : 0.0. Arinyaradius bernilai sama dengan rad jika nilai rad lebih besar atau sama dengan noljika nilai rad kurang dari nol maka maka nilai radius tetap 0.0. Setelah itunilai radius akan dimasukkan ke method getRadius.
Nilai luas diperoleh dari hasil kali konstanta PHIdengan kuadrat nilai radius. Sebagai return valuenya adalah method luas().Sedangkan untuk mencetak hasil dari nilai-nilai yang didefinisikan dari kelasLingkaran di atas menggunakan method cetakHasil() yang didalamnya adalahmencetak dengan System.out.println mulai dari titik pusat yang diperoleh darigetX dan getY, kemudian nilai radius dan luas lingkaran yang diperoleh dariperhitungan method luas().
Kelas Pemanggilan TestLingkaran
public classTestLingkaran{
  public static void main(String[]args){
       Lingkaran ling1=new Lingkaran();
       ling1.cetakHasil();
  }
}
Langkah terakhir adalah kelas pemanggilan yangtentu saja mewajibkan kita menggunakan kelas main. Dalam kelas-kelas di atasprogram ini dimaksudkan untuk melakukan penghitungan terhadap luas suatulingkaran. Dimana kelas lingkaran tersebut juga mengambil beberapa variabeldari kelas Titik. Ini dapat ditunjukkan pada pemanggilan di kelas main. Bahwakelas titik betul-betul mempunyai peran serta pada proses di kelas lingkaran.Kita lihat di bawah ini karena method main ini memanggil kelas dengan objekyang diciptakan dari kelas Lingkaran yaitu objek ling1 dengan konstruktor nonparametrik (Lingkaran ling1=new Lingkaran();) maka yang dihasilkannya adalahtercetaknya statemen “Konstruktor Titik tanpa argumen”. Dimana statementersebut kita tuliskan pada konstruktor tanpa parameter di kelas Titik. Danhasilnya pun bernilai 0 semua.
Hasil Program:
               
Para pemanggilan kelas dengan konstruktorparametrik / argumen sebagaimana di bawah yang menggunakan argumen 12, 5, 10yang artinya bahwa nilai variabel x = 12, y = 5 dan radius adalah 10, maka akanmenghasilkan nilai-nilai sebagaimana terpampang di bawah ini yaitu perhitunganluas lingkaran yang diperoleh dari perhitungan method luas() pada kelas Lingkaran.
Pemanggilandengan parameter:
public classTestLingkaran{
     public static void main(String[]args){
       Lingkaran ling1=new Lingkaran(12,5,10);
       ling1.cetakHasil();
     }
}
HasilProgram:
Jikakedua program digabung dengan cara menuliskan semua pemanggilan method
Ketikaditambah method cetakHasil()
@override
     public void cetakHasil(){
       System.out.println(“Pusat  = [“+getX() +”,”+getY()+”]”);
       System.out.println(“Radius =”+radius);
       System.out.println(“Luas   = “+luas());
     }
Dikompilasiakan error sebagaimana keterangan di bawah:
E:\Semester2\Object Oriented Programming 1\Modul10-Pewarisan\Lingkaran.java:51:cetakHasil() is already defined in Lingkaran
     public void cetakHasil(){
                ^
E:\Semester2\Object Oriented Programming 1\Modul10-Pewarisan\Lingkaran.java:43: cannotfind symbol
symbol  : class override
location: classLingkaran
@override
 ^
2 errors
Ketikadiganti dengan cetak() saja maka dikompilasi sukses
Membuatkelas Tabung dengan ketentuan:
//kelas tabung turunan kelas lingkaran
public class Tabung extends Lingkaran{
     private double tinggi;
     //Konstruktor dengan argumen x,y, radius dan tinggi
     public Tabung(int x, int y,double radius, double tinggi){
       this.x=x;
       this.y=y;
       this.radius=radius;
       this.tinggi=tinggi;
     }
     //Method luas yang mengoverridemethod luas() pada kelas Lingkaran
     @Override
     public double luas(){
       return Math.PI * radius *radius;
     }
     public double volume(){
       return Math.PI * radius *radius*tinggi;
     }
     //Method cetak yang mengoverride methodcetak() pada kelas Lingkaran
     public void cetak(){
            System.out.println(“Pusat  = [“+getX() +”,”+getY()+”]”);
            System.out.println(“Radius= “+tinggi);
            System.out.println(“Radius= “+radius);
            System.out.println(“Luas   = “+luas());
            System.out.println(“volume= “+volume());
     }
}
Kelas ini ketika kita kompail akan terjadi erroyang menanyakan x has private access in Titik this.x=x; Sehingga kita harusmelakukan perubahan pada class Titik variable int x dan y dari private kepublic atau ke protected. Karenaapa hak akses private tidak memperbolehkan variable ini diakses oleh subkelashanya dapat diakses oleh kelas yang berangkutan. Setelah kita ganti denganpublic atau protected, hak akses dibuka untuk kelas turunan bahkan sampaiturunan kedua dan seterusnya.
Ketika kita panggil kelas PersegiPanjang di atasdengan kelas main sebagaimana ditulis dibawah ini akan menghasilkan keluaranberupa penulisan kata Konstruktor Titik tanpa argument yang menandakan bahwaada proses pengaksesan pada kelas TItik, kemudian penentuan pusat  yang berisi [2, 4] menandakan bahwa padakelas Tabung diakses method getter dan setter untuk menentukan pusat sertamethod untuk menentukan radius sebesar 5. Selain itu menunjukkan  bahwa method penghitungan luas serta volumetabung yang diperoleh dari hasil perkalian PHI, radius dikuadratkan dan tinggitabung. Hal ini diperoleh dari pendefinisian objek dari Kelas Tabung denganparameter 2, 4, 5, 7 yang berarti 2 untuk x, 4 untuk y, 5 untuk radius dan 7adalah isian untuk variable tinggi tabung.
public class TestTabung{
     publicstatic void main(String[]args){
       Tabungtabung=new Tabung(2,4,5,7);
       tabung.luas();
       tabung.cetak();
     }
}
HasilProgram:
LATIHAN:
Terlebih dahulu lakukan perubahan pada kelas Titikyaitu untuk mendefinisikan variable int x dan int y menjadi public. Karenakelas Titik ini variabelnya akan digunakan oleh kelas turunan  sebagaimana pada saat kita menggunakanvariable ini pada kelas tabung. Jika tidak akan terjadi error yang menanyakan xhas private access in Titik this.x=x;
public classTitik{
  private int x;
  private int y;
public classTitik{
  publicint x;
  public int y;
PembuatanKelas PersegiPanjang
public classPersegiPanjang extends Titik{
     public int x2, y2;
     public voidPersegiPanjang(int x, int y, int x2, int y2){
       this.x=x;
       this.y=y;
       this.x2=x2;
       this.y2=y2;
     }
     public void cetakTitik(){
       System.out.println(x+”, “+y);
       System.out.println(x2+”, “+y2);
     }
     //Panjang = x2-x1; Lebar=y2-y
     public double luas(){
       return (x2-x) * (y2-y);
     }
     public void cetakLuas(){
       System.out.println(“Panjang    = “+(x2-x));
       System.out.println(“Lebar      = “+(y2-y));
       System.out.println(“Luas Segi4 =”+luas());
     }
}
PemanggilanKelas PersegiPanjang
public classTestSegi4{
     public static void main(String[]args){
       PersegiPanjang segiP=newPersegiPanjang(1,2,5,6);
       segiP.luas();
       segiP.cetakLuas();
     }
}
Hasil Program
TUGAS:
Membuatkelas Balok sebagai turunan dari kelas PersegiPanjang:
public class Balok extendsPersegiPanjang{
     publicint z;
     publicBalok(){
       System.out.print(“KelasBalok tanpa parameter”);
       this.x=x;
       this.y=y;
       this.x2=x2;
       this.y2=y2;
       this.z=z;
     }
     publicBalok(int x, int y, int x2, int y2, int z){
       System.out.print(“KelasBalok dengan parameter”);
       this.x=x;
       this.y=y;
       this.x2=x2;
       this.y2=y2;
       this.z=z;
     }
     //Panjang= x2-x1; Lebar=y2-y; tinggi=z;
     @Override
     publicdouble luas(){
       return(x2-x) * (y2-y);
     }
     //Panjang = x2-x1; Lebar=y2-y; tinggi=z;
     publicdouble volumeBalok(){
       returnluas() * z;
     }
     publicvoid cetakVolume(){
       System.out.println(“Diketahuidengan adanya 2 buah titik, yaitu :”);
       System.out.println(“PojokKiri Atas (x1,y1) di titik [“+x+”,”+y+”]”);
       System.out.println(“Pojok KananBawah (x2,y2) di titik [“+x2+”,”+y2+”] Maka :”);
       System.out.println(“Panjang =”+(x2-x));
       System.out.println(“Lebar   = “+(y2-y));
       System.out.println(“Tinggi  = “+z);
       System.out.println(“Volume  = “+volumeBalok());
     }
}
Membuat kelas TestBalokuntuk memanggil hasil proses di kelas Titik, PersegiPanjang dan kelas Balok:
public class TestBalok{
     publicstatic void main(String[]args){
       Balokblk1=new Balok();
       blk1.volumeBalok();
       blk1.cetakVolume();
       Balokblk2=new Balok(3,8,4,12,5);
       blk2.volumeBalok();
       blk2.cetakVolume();
     }
}
Hasilnya adalah:
               
KESIMPULAN:
  1. Pada class turunan dimungkinkan juga untuk meredefinisikan atau memodifikasi data dan method dari class induknya di class turunan, proses ini akan mengubah data dan method dari keduanya, kelas induk dan kelas anaknya. Istilah ini sering disebut dengan Overloading/Overriding.
  2. Overriding hanya bisa dilakukan untuk data dan method yang memiliki modifier public, protected maupun default.
  3. Dengan adanya overriding method, object akan langsung menggunakan method yang didefinisikan pada class tersebut
Untuk mengakses method yangsama milik calss induk dibutuhkan keyword super
Contoh :
super.A=10;
super.tampilan();
  1. Beberapa alasan menggunakan overriding :
    • Mendefinisikan kembali method kelas induknya secara total
      Perubahan dilakukan secara menyeluruh, baik jumlah maupun tipe parameter dari argumen inputnya, tipe nilai kembaliannya, maupun behaviour pemrosesan datanya.
    • Menambahkan behaviour tertentu pada method kelas induknya
      Perubahan hanya dilakukan untuk menambahkan behaviour yang secara khusus dimiliki hanya oleh kelas anak tersebut.
o  Pada kelas turunan juga dapatdipastikan memiliki constructor dari class induk.

Ø Untuk menggunakan constructor milik class induk kita cukup menggunakan keywordsuper
Ø  Tidak perlu menuliskan nama constructor, tetapi cukup menggunakan keywordsuper diikuti parameter yang sama dengan class induk.
  1. Penggunaan konstrktor, method setter dan getter ini salah satunya dimaksudkan untuk enkapsulasi, yaitu sebuah penyembunyian di dalam kelas agar tidak mudah diakses oleh orang lain.
Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s