Pewarisan,
Polimorfisme, dan Interface
1.
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.
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,
Anda dapat menuliskan
kode method hanya
sekali dan mereka dapat
digunakan oleh semua
subclass. Subclass hanya
perlu mengimplementasikan perbedaannya
sendiri dan induknya.
Mendefinisikan
superclass dan subclass
Untuk
memperoleh suatu class,
kita menggunakan kata
kunci extend. Untuk mengilustrasikan ini,
kita akan membuat
contoh class induk.
Dimisalkan kita mempunyai class induk yang dinamakan Person.
Perhatikan bahwa atribut name dan
address dideklarasikan sebagai protected. Alasannya kita melakukan ini yaitu,
kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses dari superclassess. Jika
kita mendeklarasikannya sebagai
private, subclasses tidak
dapat menggunakannya.
Catatan bahwa semua
properti dari superclass
yang dideklarasikan sebagai
public, protected dan default dapat diakses oleh subclasses-nya.
Sekarang, kita
ingin membuat class
lain bernama Student.
Karena Student juga
sebagai Person, kita putuskan
hanya meng-extend class
Person, sehingga kita
dapat mewariskan semua properti
dan method dari
setiap class Person
yang ada. Untuk
melakukan ini, kita tulis,
Ketika
object Student di-instantiate, default
constructor dari superclass
secara mutlak meminta untuk
melakukan inisialisasi yang
seharusnya. Setelah itu,
pernyataan di dalam subclass dieksekusi. Untuk
mengilustrasikannya, perhatikan kode berikut,
Dalam
kode ini, kita
membuat sebuah object
dari class Student.
Keluaran dari program adalah,
Alur program ditunjukkan sebagai
berikut.
Kata Kunci Super
Subclass juga dapat memanggil
constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan
pemanggil construktor super.
Pemanggil constructor super
dalam constructor dari subclass
akan menghasilkan eksekusi
dari superclass constructor
yang bersangkutan, berdasar dari argumen sebelumnya.
Sebagai contoh, pada contoh class
sebelumnya. Person dan Student, kita tunjukkan contoh dari pemanggil
constructor super. Diberikan kode berikut untuk Student,
public Student(){
super(
"SomeName", "SomeAddress" );
System.out.println("Inside
Student:Constructor");
}
Kode
ini memanggil constructor
kedua dari superclass
terdekat (yaitu Person)
dan
mengeksekusinya. Contoh kode lain
ditunjukkan sebagai berikut,
public Student(){
super();
System.out.println("Inside
Student:Constructor");
}
Kode
ini memanggil default
constructor dari superclass
terdekat (yaitu Person)
dan
mengeksekusinya.
Ada beberapa hal yang harus diingat
ketika menggunakan pemanggil constuktor super:
1.
Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM constructor.
2.
Pemanggil super() hanya dapat digunakan dalam definisi constructor.
3.
Termasuk constructor this()
dan pemanggil super()
TIDAK BOLEH TERJADI
DALAM
constructor YANG SAMA.
Pemakaian lain
dari super adalah
untuk menunjuk anggota
dari superclass(seperti
reference this). Sebagai contoh,
public Student()
{
super.name = “somename”;
super.address =
“some address”;
}
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 Anda tidak
dapat membuatnya override.
2.
Polimorfisme
Sekarang, class
induk Person dan
subclass Student dari
contoh sebelumnya, kita tambahkan subclass lain dari Person
yaitu Employee. Di bawah ini adalah hierarkinya,
Dalam
Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke
sebuah object dari subclass tersebut. Sebagai contohnya,
Sekarang dimisalkan
kita punya method
getName dalam superclass
Person kita, dan
kitaoverride method ini dalam kedua subclasses Student dan Employee,
Kembali
ke method utama
kita, ketika kita
mencoba memanggil method
getName dari reference Person
ref, method getName dari object Student akan dipanggil. Sekarang, jika kita
berikan ref ke object Employee, method getName dari Employee akan dipanggil.
Kemampuan dari reference untuk mengubah
sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme.
Polimorfisme menyediakan multiobject
dari subclasses yang berbeda
untuk diperlakukan sebagai
object dari superclass
tunggal, secara otomatis menunjuk method
yang tepat untuk
menggunakannya ke particular
object berdasar subclass yang
termasuk di dalamnya.
Contoh
lain yang menunjukkan
properti polimorfisme adalah
ketika kita mencoba
melalui reference ke method.
Misalkan kita punya
method static printInformation yang mengakibatkan object
Person sebagai reference,
kita dapat me-reference
dari tipe Employee dan tipe
Student ke method ini selama itu masih subclass dari class Person.
3.
Abstract Class
Misalnya kita
ingin membuat superclass
yang mempunyai method
tertentu yang berisi implementasi, dan juga beberapa method
yang akan di-overridden oleh subclasses nya.
Sebagai
contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai
method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa
method di dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil
contoh, method walk. Tidak semua kehidupan
berjalan(walk) dalam cara
yang sama. Ambil
manusia sebagai misal, kita
manusia berjalan dengan
dua kaki, dimana
kehidupan lainnya seperti
anjing berjalan dengan empat
kaki. Akan tetapi,
beberapa ciri umum
dalam kehidupan sudah biasa, itulah kenapa kita inginkan
membuat superclass umum dalam hal ini.
Kita dapat
membuat superclass yang mempunyai
beberapa method dengan implementasi sedangkan yang lain tidak. Class
jenis ini yang disebut dengan class abstract.
Sebuah
class abstract adalah class
yang tidak dapat di-instantiate. Seringkali
muncul di atas hirarki class
pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang mungkin
pada object dari seluruh subclasses dalam class.
Method ini dalam
class abstract yang
tidak mempunyai implementasi
dinamakan method abstract. Untuk
membuat method abstract, tinggal menulis deklarasi method tanpa tubuh class dan
digunakan menggunakan kata kunci abstract. Contohnya,
Sekarang mari membuat contoh class
abstract.
Ketika
class meng-extend class
abstract LivingThing, dibutuhkan
untuk override method abstract walk(),
atau lainnya, juga
subclass akan menjadi
class abstract, oleh
karena itu tidak dapat
di-instantiate. Contohnya,
Jika class
Human tidak dapat
overridde method walk,
kita akan menemui
pesan error berikut ini,
4.
Interface
Interface
adalah jenis khusus dari blok yang hanya berisi method signature (atau
constant). Interface mendefinisikan
tanda (signature) dari sebuah kumpulan method tanpa tubuh. Interface mendefinisikan sebuah cara standar
dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan
class-class, tanpa memperhatikan lokasinya dalam hirarki class, untuk
mengimplementasikan
sifat-sifat yang umum.
Dengan catatan bahwa interface-interface juga menunjukkan
polimorfisme, dikarenakan program dapat memanggil method interface
dan versi yang tepat dari method
yang akan dieksekusi
tergantung dari tipe object yang
melewati pemanggil method interface.
Mengapa
menggunakan interface
Kita akan
menggunakan interface jika
kita ingin class
yang tidak berhubungan mengimplementasikan method
yang sama. Melalui
interface-interface, kita dapat menangkap kemiripan
diantara class yang
tidak berhubungan tanpa
membuatnya seolah-olah class yang
berhubungan.
Mari kita
ambil contoh class
Line dimana berisi
method yang menghitung
panjang dari garis dan
membandingkan object Line ke object dari class yang sama. Sekarang, misalkan
kita punya class
yang lain yaitu
MyInteger dimana berisi
method yang membandingkan object MyInteger
ke object dari
class yang sama.
Seperti yang kita
lihat disini, kedua class-class mempunyai method yang mirip
dimana membandingkan mereka dari object lain dalam tipe
yang sama, tetapi
mereka tidak berhubungan
sama sekali. Supaya
dapat menjalankan cara untuk
memastikan bahwa dua
class-class ini mengimplementasikan beberapa method
dengan tanda yang
sama, kita dapat
menggunakan sebuah interface untuk hal
ini. Kita dapat
membuat sebuah class
interface, katakanlah interface
Relation dimana mempunyai deklarasi
method pembanding. Relasi
interface dapat dideklarasikan sebagai,
Alasan lain dalam menggunakan interface
pemrograman object adalah untuk menyatakan sebuah interface
pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita lihat
nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan
interface sebagai tipe data.
Pada
akhirnya, kita perlu
menggunakan interface untuk
pewarisan model jamak
dimana menyediakan class untuk
mempunyai lebih dari
satu superclass. Pewarisan
jamak tidak ditunjukkan di Java,
tetapi ditunjukkan di bahasa berorientasi object lain seperti C++.
Interface
VS abstract class
Berikut ini
adalah perbedaan utama
antara sebuah interface
dan sebuah class
abstract: method interface tidak
punya tubuh, sebuah
interface hanya dapat
mendefinisikan konstanta dan interface
tidak langsung mewariskan
hubungan dengan class
istimewa lainnya, mereka didefinisikan secara independent.
Satu ciri umum dari sebuah interface
dan class adalah pada tipe mereka berdua. Ini artinya bahwa sebuah interface
dapat digunakan dalam tempat-tempat dimana sebuah class dapatdigunakan. Sebagai
contoh, diberikan class
Person dan interface
PersonInterface, berikut
deklarasi yang benar:
Bagaimanapun, Anda tidak dapat membuat
instance dari sebuah interface.
Contohnya:
Ciri
umum lain adalah
baik interface maupun
class dapat mendefinisikan method. Bagaimanapun, sebuah
interface tidak punya
sebuah kode implementasi
sedangkan class memiliki salah
satunya.
Membuat
Interface
Untuk membuat interface, kita tulis,
Sebagai contoh, mari kita membuat
sebuah interface yang mendefinisikan hubungan antara dua object menurut urutan asli dari object.
Sekarang,
penggunaan interface, kita gunakan kata kunci implements. Contohnya,
Ketika class Anda mencoba
mengimplementasikan sebuah interface, selalu pastikan bahwa Anda mengimplementasikan semua
method dari interface,
jika tidak, Anda
akan menemukan kesalahan ini,
Hubungan dari interface ke class
Seperti
yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan
sebuah interface selama kode implementasi untuk semua method yang didefinisikan
dalam interface tersedia.
Hal lain yang perlu
dicatat tentang hubungan
antara interface ke
class-class yaitu, class hanya dapat mengEXTEND SATU superclass,
tetapi dapat mengIMPLEMENTASIkan BANYAK
interface. Sebuah contoh dari sebuah class yang mengimplementasikan
interface adalah,
Contoh
lain dari class
yang meng-extend satu
superclass dan mengimplementasikan sebuah interface adalah,
Catatan bahwa sebuah interface bukan
bagian dari hirarki pewarisan class. Class yang tidak berhubungan dapat
mengimplementasikan interface yang sama.
Pewarisan
antar interface
Interface bukan
bagian dari hirarki
class. Bagaimanapun, interface
dapat mempunyai hubungan pewarisan
antara mereka sendiri.
Contohnya, misal kita
punya dua interface StudentInterface dan PersonInterface. Jika
StudentInterface meng-extend
PersonInterface, maka ia akan mewariskan semua deklarasi method dalam
PersonInterface.
Comments
Post a Comment