KEYWORD THIS DAN SUPER
1. Keyword this
Anggota statik suatu kelas bisa digunakan langsung di dalam kelas tersebut. Untuk digunakan di kelas lain, maka ia harus dipanggil dengan nama lengkapnya dalam bentuk "namaKelas.namaAnggota", misalnya "System.out" adalah variabel anggota statik dengan nama "out" di dalam kelas "System". Kita bisa menggunakan nama lengkap kelas tersebut di manapun, bahkan dari dalam kelas yang sama, misalnya karena nama anggota tersebut disembunyikan oleh variabel lokal yang namanya sama.
Variabel dan metode instansi juga bisa digunakan langsung di dalam kelas tersebut, misalnya suatu variabel instansi bisa digunakan langsung oleh metode instansi di kelas yang sama. Anggota instansi juga memiliki nama lengkap akan tetapi ingat bahwa anggota instansi dimiliki oleh objek, bukan kelas. Sehingga untuk memanggil suatu anggota instansi, kita harus menggunakan nama objek yang diciptakan dari kelas tersebut, dalam bentuk namaObjek.namaAnggota.
Akan tetapi, misalnya kita sedang menulis metode instansi di suatu kelas. Bagaimana caranya kita memanggil anggota instansi kelas yang sama jika kita belum tahu nama objek apa yang diciptakan dari kelas ini?
Java memiliki variabel spesial yang dinamakan "this" yang bisa digunakan untuk kasus di atas. Variabel ini digunakan pada suatu objek untuk memanggil metode atau variabel instansi pada objek yang sama. Maksudnya, this, merujuk pada "objek ini" yaitu objek di mana metode sedang dijalankan. Jika x adalah variabel instansi dalam suatu objek, maka this.x adalah nama lengkap variabel tersebut jika dipanggil dari dalam objek yang sama. Jika metode suatuMetode() adalah metode instansi pada suatu objek, maka this.suatuMetode() bisa digunakan untuk memanggil metode tersebut dari objek yang sama. Ketika komputer menjalankan perintah tersebut, komputer akan mengganti variabel this dengan objek yang berjalan pada saat itu.
Salah satu kegunaaan this adalah pada konstruktor, misalnya :
public class Murid {
private String nama; // Nama murid
public Murid(String nama) {
// Konstruktor, membuat murid dengan nama yang diberikan
this.nama = nama;
}
.
. // Variabel dan metode lain.
.
}
Dalam konstruktor di atas, variabel instansi nama disembunyikan oleh parameter formal yang bernama sama. Akan tetapi, variabel instansi masih tetap bisa dipanggil dengan nama lengkapnya, this.nama. Cara ini merupakan cara yang lazim, artinya kita tidak perlu mengganti nama parameter formal dengan nama lain agar namanya tidak bentrok dengan nama salah satu variabel instansinya. Kita bisa menggunakan nama parameter formal yang sama persis dengan variabel instansinya.
Ada lagi kegunaan lain dari this. Ketika kita sedang menulis metode instansi, kita ingin memberikan objek sebagai parameter aktual. Dalam hal ini, kita bisa menggunakan this sebagai parameter aktualnya. Misalnya, kita ingin mencetak suatu objek sebagai string, kita bisa menggunakan perintah "System.out.println(this);". Atau kita ingin mengisi nilai this ke dalam variabel lain. Pokoknya, kita bisa melakukan segala hal seperti layaknya variabel kecuali mengganti isinya.
2. Keyword super
Keyword super digunakan untuk melakukan reference ke superclass-nya. Menurut penggunaannya, keyword super dapat digunakan dalam dua cara yaitu :
a. Memanggil superclass constructor
Untuk memanggil superclass constructor, syntaks yang digunakan adalah :
Contoh pada Cylinder.java :
public class Cylinder extends Circle {
private double length;
public Cylinder() { //Constructor
super();
length = 1.0;
}
public Cylinder(double r,double l) { //Constructor
super(r);
length = l;
}
...
}
Catatan : pemanggilan keyword super harus dilakukan awal didalam constructor. |
b. Memanggil superclass method
Untuk memanggil superclass method, syntaks yang digunakan adalah :
super.method(parameters);
Contoh pada Cylinder.java, findVolume dapat dibuat menjadi :
public class Cylinder extends Circle {
...
public double findVolume() {
return super.findArea() * length;
}
...
}
Penggunaan keyword super untuk method boleh digunakan atau tidak digunakan, apabila method pada superclass tidak dioverride / dibuat ulang pada subclass. Bila terjadi method override keyword super harus digunakan.
Contoh pada Cylinder.java :
public class Cylinder extends Circle {
private double length;
public Cylinder() { //Constructor
super();
length = 1.0;
}
public Cylinder(double r,double l) { //Constructor
super(r);
length = l;
}
public double getLength() {
return length;
}
public double findArea() {
System.out.println(“Call Cylinder find Area”);
return 2*super.findArea()+2*getRadius()*3.14159*length;
}
public double findVolume() {
return findArea() * length;
}
}
c. Contoh penggunaan keyword super :
//file : Circle.java
public class Circle {
private double radius;
Circle(double r) { //Constructor
radius = r;
}
Circle() { //Constructor
radius = 1.0;
}
public double getRadius() {
return radius;
}
public double findArea() {
return radius*radius*3.14159;
}
}
//file : Cylinder.java
public class Cylinder extends Circle {
private double length;
public Cylinder() { //Constructor
super();
length = 1.0;
}
public Cylinder(double r,double l) { //Constructor
super(r);
length = l;
}
public double getLength() {
return length;
}
public double findVolume() {
return findArea() * length;
}
}
//file : Test.java
public class Test {
public static void main(String [] Args) {
//Create Cylinder object and display it's properties
Cylinder myCylinder = new Cylinder(5.0,2.0);
System.out.println("The length is "+myCylinder.getLength());
System.out.println("The radius is "+myCylinder.getRadius());
System.out.println("The Cylinder Volume is
"+myCylinder.findVolume());
System.out.println("The area of Circle is
"+myCylinder.findArea());
}
}
End of – Layouts