Variabel spesial
this
dan super
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. . }
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.Java juga memiliki variabel spesial yang dinamakan "
super
" untuk digunakan dalam metode instansi. Variabel super
digunakan dalam kelas turunan. super
mengacu pada objek di mana metode tersebut berada, akan tetapi ia merupakan bagian dari kelas super dari objek tersebut. Suatu kelas bisa ditambah atau dimodifikasi dari kelas turunannya. Variabel
super
hanya mengacu pada bagian objek sebelum ia ditambah atau dimodifikasi,
atau dengan kata lain bentuk aslinya sebelum dia diturunkan, yang dalam
hal ini sama dengan kelas supernya.Misalnya kita akan menulis suatu kelas, dan kelas tersebut memiliki metode instansi bernama
suatuMetode()
. Pernyataan super.suatuMetode()
berarti menjalankan suatuMetode()
pada kelas supernya. Jika tidak ada metode sutuMetode()
pada kelas supernya, Java akan menampilkan pesan kesalahan sintaks.Alasan mengapa Java memiliki variabel
super
adalah karena banyak hal yang mungkin tersembunyi pada kelas turunan.
Misalnya karena kita mengimplementasikan fungsi lain pada kelas turunan
dengan nama yang sama (dalam kaitannya dengan polimorfisme, misalkan).Ketika kita membuat metode baru pada kelas turunan yang memiliki nama dan jenis parameter yang sama dengan metode pada kelas supernya, metode dari kelas super akan disembunyukan. Dalam bahasa pemrograman, metode ini menimpa (override) metode dari kelas supernya. Variabel
super
bisa digunakan untuk mengakses metode aslinya yang didefinisikan di kelas supernya.Kegunaan utama dari
super
biasanya untuk memperluas kegunaan metode yang sudah ada, bukan menggantinya secara keseluuruhan. Metode baru bisa menggunakan super
untuk menjalankan instruksi pada kelas supernya, kemudian menambahkan instruksi lain pada kelas turunannya.Misalnya, kita memiliki kelas
PasanganDadu
yang memiliki metode kocok
. Kemudian kita akan membuat kelas turunan yaitu DaduGrafis
yang berfungsi untuk menggambar dadu pada layar. Metode kocok()
dalam DaduGrafis
harus melakukan apa yang dilakukan oleh PasanganDadu
, dengan tambahan perintah untuk menggambar dadu tersebut di layar. Kita bisa tulis definisi kelas DaduGrafis
dalam bentuk :public class DaduGrafis extends PasanganDadu { public void kocok() { // Mengocok dadu, kemudian menggambarnya di layar super.kocok(); // Panggil metode kocok() di kelas PasanganDadu gambar(); // Gambar ulang dadu } . . // Metode dan variabel lain, termasuk metode gambar() . }
kocok()
pada kelas supernya tanpa mengetahui dengan detail apa yang dilakukan langkah per langkah di kelas supernya.Konstuktor pada Kelas Turunan
Konstruktor tidak bisa diturunkan, artinya jika kita membuat kelas turunan dari suatu kelas, konstruktor pada kelas supernya tidak termasuk bagian yang diturunkan. Jika kita ingin konstruktor tersebut pada kelas turunannya, maka kita harus membuat kembali konstruktor tersebut di kelas yang baru. Jika tidak, maka Java akan membuat konstruktor standar tanpa parameter apa-apa.
Hal ini mungkin menjadi masalah jika konstruktor pada kelas supernya melakukan banyak tugas. Artinya kita harus mengulang kembali menuliskan semua instruksi pada kelas supernya di kelas turunan yang baru. Masalahnya akan lebih rumit jika kita tidak mengetahui sama sekali apa yang dilakukan kelas supernya, misalnya apabila tidak ada kode sumbernya.
Cara yang paling mudah adalah menggunakan
super
. Di baris pertama konstruktor baru kita di kelas turunannya, kita bisa menggunakan super
untuk memanggil konstruktor kelas supernya. Sintaksnya sedikit aneh dan
membingungkan, dan hanya bisa digunakan untuk satu situasi saja :
Sintaksnya mirip seperti memanggil subrutin super
(meskipun sebenarnya super
bukan subrutin dan kita tidak bisa memanggil konstruktor seperti kita memanggil subrutin biasa).Misalnya kelas
PasanganDadu
memiliki konstruktor yang memiliki dua parameter bertipe int. Maka kita bisa membuat konstruktor pada kelas DaduGrafis
seperti :public class DaduGrafis extends PasanganDadu { public DaduGrafis() { // Konstruktor kelas ini super(3,4); // Panggil konstruktor dari kelas PasanganDadu // dengan parameter 3 dan 4 inisialisasiGrafis(); // Lakukan inisialisasi grafis // untuk digunakan pada kelas DaduGrafis } . . // Konstruktor, variabel dan metode instansi lain . }
Sumber : http://java.lyracc.com/belajar/java-untuk-pemula/dan-super
Tidak ada komentar:
Posting Komentar