Memahami Penggunaan Keyword Super Pada Pemrograman Java

Sebelumnya anda suda mengetahui mengenai keyword this sebagai referensi untuk objek yang dipanggil. Sedangkan keyword super akan mengacu pada superclass.

Ketika suatu sub class menerima pewarisan data fields yang bisa diakses dan method-methodnya dari superclass, apakah constructor dari super class juga akan ikut di wariskan pada sub class tersebut?

Apakah constructor dari super class bisa dipanggil melalui sub class?

Nah, fungsi dari keyword super itu sendiri adalah:
  • Memanggil constructor dari superclass

  • Memanggil method dari superclass

  • Mengakses variabel instance super class
Pada pembahasan kali ini akan dijelaskan megenai fungsi dari keyword super tersebut.


keyword super program Java

a. Memanggil Conctructor Dari Superclass

Constructor digunakan untuk membentuk instance dari suatu class. Namun, tidak seperti properti dan method, constructor ini tidak diwariskan pada subclass.

Sehingga constructor dari subclass ini hanya dapat dipanggil melalui constructor dari sub class dengan menggunakan keyword super.

Syntax nya adalah:
  • super()
    Akan memanggil constructor tanpa argumen dari superclass

  • super(parameter)
    Memanggil constructor dari superclass yang memiliki argumen-argumen yang sesuai.
Pernyataan super() ataupun super(parameter) harus ditempatkan pertama kali di dalam constructor dari sub class.

Dan ini adalah satu-satunya cara untuk memanggil constructor super class melalui subclass.

Contoh:

import java.util.Date;

//Class Benda sebagai super class
public class Benda {
    
 private Date tanggalDibuat;
 private String warna = "Merah";
 private boolean terisiWarna;
 
 //Constructor
 public Benda(Date tanggalDibuat, String warna, boolean terisiWarna){
  
  this.tanggalDibuat = tanggalDibuat;
  this.warna = warna;
  this.terisiWarna = terisiWarna;
  
 }

 //Method getter warna
 public String getWarna() {
  return warna;
 }

 //Method setter warna
 public void setWarna(String warna) {
  this.warna = warna;
 }

 //Method getter nilai boolean
 //apakah terisi warna sepenuhnya atau tidak
 public boolean isTerisiWarna() {
  return terisiWarna;
 }

 //Method setter apakah terisi warna sepenuhnya atau tidak
 public void setTerisiWarna(boolean terisiWarna) {
  this.terisiWarna = terisiWarna;
 }

 //Method getter untuk tanggal dibuat
 public Date getTanggalDibuat() {
  return tanggalDibuat;
 }
 
}


import java.util.Date;

//class Lingkaran sebagai sub class dari Benda
public class Lingkaran extends Benda {
 
 private double jari_jari;
 
 //Method menghitung luas lingkaran
 double hitungLuas(){
  final double PHI = 3.14;
  double luasLingkaran = PHI * (jari_jari * jari_jari);
  return luasLingkaran;
 }
 
 //Constructor class Lingkaran
 public Lingkaran(double jari_jari){
  /*class Lingkaran memanggil constructor
    dari superclass-nya yaitu class Benda
    menggunakan keyword super
   */
  super(new Date(), "Merah", true);
  this.jari_jari= jari_jari;
 }
 
 public static void main (String args []){
  
  //Membuat objek lingkaran
  Lingkaran lingkaran = new Lingkaran(5.45);
  
  System.out.println("Tanggal lingkaran dibuat adalah " + lingkaran.getTanggalDibuat()
  + "\nWarna lingkaran adalah " + lingkaran.getWarna() + "\nApakah lingkaran"
  + " terisi sepenuhnya dengan warna " + lingkaran.getWarna() +"? " + lingkaran.isTerisiWarna()
  + "\nLuas lingkaran adalah " + lingkaran.hitungLuas());
  
 }

}

Contoh output:
Tanggal lingkaran dibuat adalah Sun Oct 29 12:08:21 SGT 2017
Warna lingkaran adalah Merah
Apakah lingkaran terisi sepenuhnya dengan warna Merah? true
Luas lingkaran adalah 93.26585

Konstruktor Berantai

Suatu constructor dapat memanggil constructor overload atau juga constructor dari super class. Jika tidak ada pemanggilan yang dilakukan secara eksplisit, maka secara otomatis compiler akan meletakkan super() pada pernyataan pertama dalam konstruktor.

Misalnya:

public class A {
 
 //Default constructor
 public A(){
  
 }
 //Equivalen dengan :
  /*
  public A(){
  super();
 }
  */
 
 //Constructor ke-1
 public A(String string){
  System.out.println(string);
 }
/*
  Equivalen dengan :
  public A(String string){
  super();
  System.out.println(string);
 } 
  */

}

Dalam kasus apapun, ketika pengkonstruksian suatu instance telah dilakukan, maka constructor-constructor dari superclass-nya yang terkait dalam rantai inheritance akan dipanggil.

Ketika suatu objek dikonstruksi pada subclass maka constructor dari subclass itu pertama-tama akan memanggil constructor dari superclass-nya sebelum melakukan tugasnya sendiri.

Jika superclass-nya juga inherit dari class lainnya,  maka constructor dari superclass itu akan memanggil contructor dari superclassnya juga sebelum melakukan tugasnya sendiri.

Proses ini terus berlanjut sampai dengan constructor yang terakhir pada hirarki inheritance, dan ini disebut constructor chaining.

Perhatikan contoh dibawah ini untuk memahaminya:

public class Orang {
 //Default constructor class Orang
 public Orang(){
 System.out.println("(1) Melakukan tugas Orang");
 }

}


//Class Siswa inherit dari class Orang
public class Siswa extends Orang {
 //Default constructor class Siswa
 public Siswa(){
  /*
   Keyword this dapat digunakan untuk memanggil constructor
   pada class yang sama
   */
  
  this("(2) Memanggil overloaded constructor dari class Siswa\n");
  System.out.println("(3) Melakukan tugas Siswa");
 }
 
 //Constructor ke-1 class Siswa
 public Siswa(String myString){
  System.out.print(myString);
 }

}


//Class SiswaSLTA inherit dari class Siswa
public class SiswaSLTA extends Siswa {
 //Default constructor class SiswaSLTA
 public SiswaSLTA(){
  System.out.println("(4) Menjalankan tugas Siswa SLTA");
 }
 
 //main method
 public static void main(String[] args) {
   //Mengkonstruksi objek Siswa SLTA
   new SiswaSLTA();
 }
}

Output:
(1) Melakukan tugas Orang
(2) Memanggil overloaded constructor dari class Siswa
(3) Melakukan tugas Siswa
(4) Menjalankan tugas Siswa SLTA

b. Memanggil Method Milik Superclass

Keyword super dapat digunakan sebagai referensi method selain dari constructor dalam superclass. Syntax-nya adalah:

super.method(parameters);

Contoh:

//Class Binatang sebagai superclass
public class Binatang {
 
 void bersuara(){
  System.out.println("Binatang bersuara");
 }

}


//Class Ayam inherit dari class Binatang
public class Ayam extends Binatang {
 
 void berlari(){
  System.out.println("Ayam berlari");
 }
 
 void bersuara(){
  System.out.println("Kukuruyuk");
 }
 
 void berperilaku(){
  //memanggil method bersuara() milik class Binatang
  super.bersuara();
  berlari();
 }
 
 public static void main(String[] args) {
  
  Ayam ayam = new Ayam();
  ayam.berperilaku();
 }
}

Output:
Binatang bersuara
Ayam berlari

Pada contoh diatas Binatang dan Ayam memiliki method yang sama, yaitu bersuara(). Jika objek Ayam memanggil method bersuara(), harusnya output yang keluar adalah "Kukuruyuk". Namun, karena keyword super digunakan, maka method yang dipanggil adalah milik super class. Oleh karena itu outputnya adalah "Binatang bersuara".

c. Digunakan Untuk Mengacu Secara Langsung Pada Variabel Instance Milik Super Class


Anda dapat menggunakan keyword super untuk langsung mengakses data member atau field dari super class. Dan ini digunakan jika supe class dan sub class memiliki field-field yang sama.

Contoh:

public class Benda {
    
 String warna = "Hijau";
 
}


public class Kotak extends Benda {
 
 String warna = "Kuning";
 
 void tampilkanWarna(){
  
  System.out.println("Warna kotak adalah " + warna);
  
  //Mengakses variabel instance warna dari super class Benda
  System.out.println("Warna benda adalah " + super.warna);
 }
 
 public static void main(String[] args) {
  
  Kotak kotak = new Kotak();
  kotak.tampilkanWarna();
  
 }

}

Outout:
Warna kotak adalah Kuning
Warna benda adalah Hijau

Demikianlah beberapa fungsi penggunaan keyword super pada pemrograman Java. Semoga bisa membantu anda yang sedang belajar Java.
Memahami Penggunaan Keyword Super Pada Pemrograman Java Memahami Penggunaan Keyword Super Pada Pemrograman Java Reviewed by Bahasa Java on 01.09.00 Rating: 5

Tidak ada komentar:

Diberdayakan oleh Blogger.