Inheritance
(Pewarisan)
Dalam
Java, semua class, termasuk class yang membangun Java API, adalah subclasses
dari superclass Object. Contoh hirarki class diperlihatkan di bawah ini.
Beberapa class di atas class utama dalam hirarki class dikenal sebagai
superclass.
Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut.
Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut.
Pewarisan
adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat
atau method didefinisikan dalam superclass, sifat ini secara otomatis
diwariskan dari semua subclasses. Jadi, Kita dapat menuliskan kode method hanya
sekali dan mereka dapat digunakan oleh semua subclass. Subclass hanya perlu
mengimplementasikan perbedaannya sendiri dan induknya.
Keuntungan dari inheritance adalah :
· Bersifat reusable
Tidak harus menyalin semua data dan method
dari suatu kelas jika akan menggunakannya lagi
· Kemudahan dalam me-manage kelas yang
memiliki data dan method yang sama.
Untuk memodifikasi suatu data atau method
untuk semua subkelas atau kelas anak, maka tidak perlu melakukan perubahan di
masing-masing kelas anak melainkan hanya pada kelas induk saja.
Istilah dalam inheritance:
Extends
Keyword
ini harus kita tambahkan pada definisi class yang menjadi subclass.
Cara
pendeklarasian:
Superclass
Superclass
atau dapat disebut dengan class induk digunakan untuk menunjukkan hirarki class
yang berarti class dasar dari subclass/class anak.
Subclass
Subclass
adalah class anak atau turunan secara hirarki dari superclass.
Super
Keyword
ini digunakan untuk merujuk pada member dari parent class.
Ketika
kita memakai konsep inheritance, maka yang harus kita ketahui adalah
konstruktor dari parent class tidak dapat diwariskan ke subclass-nya. Sebagai
konsekuensinya adalah setiap kali kita membuat suatu subclass, maka kita harus
memanggil konstruktor parent class di konstruktor subclass. Jika kita tidak
mendeklarasikannya secara eksplisit, maka kompiler Java akan menambahkan
deklarasi pemanggilan kontruktor parent class di konstruktor subclass.
Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass
(seperti reference this).
Ada
beberapa hal yang harus diingat ketika menggunakan pemanggil constuktor super:
· Pemanggil super() HARUS DIJADIKAN
PERNYATAAN PERTAMA DALAM constructor.
·
Pemanggil super() hanya dapat digunakan
dalam definisi constructor.
· Termasuk constructor this() dan pemanggil
super() TIDAK BOLEH TERJADI DALAM constructor YANG SAMA.
This
Kata
kunci this adalah variable implisit yang ada didalam java. Ditinjau dari
kepemilikannya, variabel terbagi menjadi 2, yaitu : Variabel kelas dan Variabel
Instans. Variabel kelas adalah variabel yang melekat pada kelas dan tidak
terpengaruh oleh proses instantiasi, sehingga tidak dapat dimiliki dan diakses
oleh objek yang diinstans dari kelas tersebut. Variabel instans adalah variabel
yang dimiliki oleh objek dari proses intantiasi suatu kelas.
Variable
This digunakan untuk mengakses variabel instans dari masing-masing objek. This
sebenarnya adalah sebuah variable read-only (tidak dapat diubah nilainya).
Dengan variable ini, akan didapatkan reference atau pointer menuju objek
terkini. Misalkan sebuah aplikasi sedang berjalan, pada saat tertentu yang dijalankan
oleh komputer adalah method aMethod() milik object anObject. Dari method
aMethod() dibutuhkan reference ke objek terkini yaitu object anObject itu
sendiri. Untuk itulah digunakan variabel this dalam method aMethod() milik
object anObject.
Kata kunci this dapat digunakan untuk
beberapa alasan berikut:
•
Adanya ambigu pada atribut lokal dari
variabel lokal
•
Menunjuk pada object yang meminta method
non-static
•
Menunjuk pada konstruktor lain
•
Mengakses variabel instans dari
masing-masing object
Format penulisan this
this.data_member
→ merujuk pada data member
this.function_member()
→ merujuk pada function member
this()
→ merujuk pada konstruktor
Overriding Method
Untuk
beberapa pertimbangan, terkadang class asal perlu mempunyai implementasi
berbeda dari method yang khusus dari superclass tersebut. Oleh karena itulah,
method overriding digunakan. Subclass dapat mengesampingkan method yang
didefinisikan dalam superclass dengan menyediakan implementasi baru dari method
tersebut. Misalnya kita mempunyai implementasi berikut untuk method getName
dalam superclass Person,
public class Person
{
:
:
public String getName()
{
System.out.println(“Parent: getName”);
return name;
}
:
}
Untuk override, method getName dalam subclass Student, kita tulis,
public class Student extends Person
{
:
:
public String getName()
{
System.out.println(“Student: getName”);
return name;
}
:
}
Jadi,
ketika kita meminta method getName dari object class Student, method overridde
akan dipanggil, keluarannya akan menjadi, Student: getName.
Method Final dan class Final
Dalam
Java, juga memungkinkan untuk mendeklarasikan class-class yang tidak lama
menjadi subclass. Class ini dinamakan class final. Untuk mendeklarasikan class
untuk menjadi final kita hanya menambahkan kata kunci final dalam deklarasi
class. Sebagai contoh, jika kita ingin class Person untuk dideklarasikan final,
kita tulis,
public final class Person
{ //area kode
}
Beberapa
class dalam Java API dideklarasikan secara final untuk memastikan sifatnya
tidak dapat di-override. Contoh-contoh dari class ini adalah Integer, Double,
dan String. Ini memungkinkan dalam Java membuat method yang tidak dapat
di-override. Method ini dapat kita panggil method final. Untuk mendeklarasikan
method untuk menjadi final, kita tambahkan kata kunci final ke dalam deklarasi
method. Contohnya, jika kita ingin method getName dalam class Person untuk
dideklarasikan final, kita tulis,
public final String getName()
{
return name;
}
Method
static juga secara otomatis final. Ini artinya kita tidak dapat membuatnya
override.