3.1,
BAB 3
INHERITANCE
Tujuan Pembelajaran
1, Mengenal dan memahami konsep inheritance
2. Memahami cara menerapkan inheritance dengan constructor
Dasar Teo
“Duluan mana, telur atau ayam dulu?”, Pertanyaan tersebut pasti familiar di
telinga anda. Tapi kali ini, kita tidak membahas hal itu, “Trus kalau nggak dibahas,
buat apa ditulis di modul ini?”, Jawabannya adalah sebiigai berikut. Sebuah telur
yang sudah beberapa bulan dierami oleh induknya, maka akan menetas menjadi
anak ayam. Anak ayam yang dirawat dan dipelihara baik-baik, pastilah akan sama
seperti ibunya, Demikian juga dalam kehidupan manusia. Kehicupan kita semua
pasti memiliki karakter yang ‘hampir’ sama dengan orang tua kita, “Mengapa harus
disebut hampir”?”” Karena tidak mungkin kita mirip 100% dengan orang tua kita.
Selain bentuk fisik yang memiliki keseragaman yang hampir sama, tentunya kita
juga memiliki beberapa karakter yang hampir sama
dengan kedua orang tua kita, Misal : Ayah Nobita
adalah orang yang. penyabar. Ada kemungkinan
Nobita juga memiliki.sikap penyabar. Tapi di balik
semua itu, pasti Nobita punya sifat yang tidak dimiliki
oleh ayahnya, yaitu sifat pemalas, Dalam pemrograman, sifat orang tua yang
diturunkan kepada anaknya dikenal dengan nama pewarisan (inheritance)
Inheritance merupakan proses pewarisan data dan method dari suatu class
yang telah ada kepada class baru, Class yang mewariskan disebut dengan kelas
super (super class), sedangkan kelas yang mendapat warisan tersebut atau class
yang diwariskan disebut dengan subkelas (sub class), Ibarat contoh di atas, berarti
sedangkan Nobita berperan seba,
ayah Nobita berperan sebagai super clas
class. Untuk menggunakan inheritance, maka dibutuhkan keyword extends. Cara
penulisannya adalah sebagai berikut
28|P BO(OOPT class nanaSubClass extends namaSuperclass
2 at
3 | //definisi kelas
4 }
Contoh :
Misalkan kita memiliki beberapa software di komputer. Software tersebut
beraneka ragam. Ada software game, software edukasi, dan masih banyak lagi.
Biarpun berbeda jenisnya, software tersebut pasti memiliki kesamaan dengan
software sejenisnya, Dengan kata lain, apabila saya melihat dari segi pemrograman,
maka class Software adalah superclass, sedengakan class Game adalah turunan dari
class Software (subclass). Jadi penulisan script pada cl
berikut
ss Game adalah sebagai
T class Game extends Software
4
//definisi Kelas Game
4}
Berikut ini adalah beberapa menfaatapabila anda menggunakan konsep
inheritance :
1. Bersifat Reusable
Bayangkan saja apabila anda imemerlukan beberapa kelas yang berasa dari basis
yang sama (data dan method yang sama), namun pada masing masing kelas
akan ditambahkan data atau method tambahan, Dengan menggunakan
inheritance, anda cukup mengambil data atau method pada class induknya dan
memberikan beberapa tambahan data atau method pada class anaknya apabila
diperlukan
2. Kemudahan dalam me-manage kelas yang dimiliki data dan method yang sama
Bila anda ingin memodifikasi suatu data atau method pada semua subclass, anda
tidak perlu melakukan perubahan pada masing-masing kelas pada subclass.
‘Anda cukup melakukan perubahan data atau method pada kelas super
(superclass) yang mewarisi subclass tersebut.
Keyword super digunakan oleh subclass untuk memanggil constructor atau
method yang ada pada superclassnya, Berikut adalah cara penulisan “super” pada
subclass untuk memanggil constructor pada superclass,
29|PBO(OOPsuper") —stau_|.super (parameter)
Sedangkan, cara penulisan “super” pada subclass untuk memanggil method pada
superclass adalah sebagai berikut :
a
super.namaMethod() | atau super.namaMethod(parameter)
———=
Pereobaan
Berdasarkan contoh di atas tentang Software, buatlah 3 buah class yang terdiri
dari class Software, class Game dan class TesGame. Class Software harus memiliki
beberapa ketentuan sebagai berikut :
1. Atribut berisi kode, nama, dan lisensi
2. Terdapat 2 buah constructor Software. Constructor pertama tidak memiliki
parameter dan tidak ada isinya (kosongan), Sedangkan constructor kedua
‘memiliki parameter untuk mengeset nilai kode, nama, dan lisensi (freeware /
shareware) berdasarkan inputan user.
Terdapat method setter dan getter untuk mengeset / merubah dan mengambil
nilai dari kode, nama, dan lisensi (freeware / shareware).
Class Game harus memiliki beberapa ketentuan sebagai berikut
1. Atribut berisi jenis dan kode dan diberi nilai default “unknowa”.
2. Terdapat 2 buah cotistructor Game. Constructor pertama memiliki parameter
untuk mengeset nilai Kode, nama, dan lisensi (freeware / shareware)
berdasarkan inputan user. Data kode, nama, dan lisensi (freeware / shareware)
diambil dari constructor kedua pada class Software (gunakan keyword super).
Sedangkan constructor kedua memiliki parameter untuk mergeset nilai kode,
nama, lisens
(freeware / shareware), jenis (offline / online), dan tipe (action /
areade / adventure / sport / puzzle) berdasarkan inputan user. Data kode, nama,
dan_lisensi (freeware / shareware) diambil dari setter pada class Software
(gunakan keyword super),
3. Terdapat method getter untuk mengambil nilai dari variabel kode, nama, dan
lisensi (freeware / shareware) pada class Software serta mengambil nilai dari
variabel jenis (offline / online) dan tipe (action/ arcade / adventure / sport /
puzzle),
30|/P BO(OOP)Sedangkan pada class TesGame digunakan untuk memanggil class Game.
Berikut ini gambaran class diagramnya :
ape Gime
[sees ais
[ses aezer)
‘Anak panah “€” menggambarkan konsep inherintance, dimana class Game
J caneistina ode Steanana Stina ears
| caneisting ode, sting nana, Sunglisen, Sing jens Sing ts]
merupakan turunan dari class Software. Sehingga variabel kode, nama, dan lisensi
pada class Software tidak perlu dideklarasikan ulang,
3.3.1, Membuat kerangka class Software
31) public class Software ¢
a2
33
1s
45
16
0
ae
29
20
a}
Setelah anda membuat class Software, simpan file tersebut dengan nama
Software.java.
3.3.2. Mendeklarasi Variabel yang dibutuhkan dalam class Software
12 4
13) private String kode, nama, lisensi;
3.3.3. Mendeklarasi constructor dalam class Software
af
3
19, Software (String kode, String nama, String lisensi) {
| oe
Bl) sacs
||| ea.
31/PBO(OOP)3.3.4. Membuat method setter dalam class Software
at mans
a7
3.3.5. Membuat method getter dalam class Software
:
| PE camcy
_ Sos
Be cas a MOD
a1 cys
3.3.6. Membuat kerangka class Game
31 publiG)class Game extends Software{
2 ek
13
me os
a8
16 evte:
a7
ae}
Setelah anda membuat class Game, simpan file tersebut dengan nama
Game,java, Di dalam class Game, saya juga menyediakan tempat untuk
mendeklarasikan variabel, constructor dan getter. Penggunaan extends
menunjukkan bahwa class game merupakan turunan dari class Software.
3.3.7. Mendeklarasi variabel yang dibutuhkan dalam class Game
2 <
a private jenig = "unknown";
a privace fipe = “unknown"s
Perlu diketahui bahwa dalam pembuatan class Game tidak diperlukan
pendeklarasian variabel kode, nama, dan lisensi.
3.3.8. Mendeklarasi constructor dalam class Game
32|PBO(OOP)a6
2
2
2
2
2
2
26
Setelah membuat variabel yang dibutuhkan pada class Game, langkah
selanjutnya anda membuat constructor Game. Constructor ini nantinya akan
gone igion tat, fons sna. string een, nen ste, sin i]
Sedangkan jika anda ingin memanggil setter / getter pada class induknya,
anda dapat menggunakan keyword “super” yang kemudian dilanjutkan
33|PBO(OOP)dengan nama method yang dipanggil seperti constructor kedua pada
Game (lihat script yang diberi kotak berwama biru pada gambar di atas).
Artinya penggunaan keywoard “super” akan mengarah kepada constructor
class induknya (lihat script yang diberi kotak berwama orange pada gambar
i atas).
Membuat method getter dalam class Game
Setelah membuat constructor, anda tinggal membuat method getter untuk
mengambil nilai dari masing-masing variabel. Hal ini bertujuan untuk
mengambil nilai dari variabel pada class Game yang nantinya akan kita
kembalikan ke dalam class ‘TesGame. Perlu diketahui pula, bahwa dalam
pembuatan variabel pada parameter di method getter, harus sesuai dengan
tipe data pada variabel yang dideklarasikan di kelas terscbut maupun di
kelas induknya. Gambar di bawah ini menunjukkan deklarasi getter.
2
eo Publiq,String getKode(){
23 [ retin super.getKode():
30 ,
aE piblic String getNama(){
33] t ,
BG @eithe String gottieensi (yt
35| | Feturn super-getLisensi():
a6] Co
37 a public String getJenis(){
se | return jenis:
ee) +
40) public String getTipe(){
ar} | return tiper
a)
Seperti halnya penggunaan constructor kedua pada class Game yang
menggunakan super.[nama_method], maka untuk method getKode(),
getNama(), dan getLisensi() menggunakan keywoard “super” dikarenakan
tidak dideklarasikan pada class Game.
34|PBO(OOP)3.3.10, Membuat kerangka class TesGame
12) supose sere.ae.
Lz) pobisc class foaGams (
15 publac svatac rose mags (Scrang (1 segs) chtovs Exception (
# Bateereatendes Br ~ now Suffercaeader (new InputSeeeanieedes (Sveten.sc))+
is
i
n
Fa =
is
x oo
a
ze o
%
2B 1
2
2
3.3.11, Membuat instance of class
Setelah anda membuat class TesGame, langkah berikutnya yang anda
Jakukan adalah membuat sebuah objek yang bertipe class Game. Pembuatan
variabel dengan bertipe kelas itulah yang dinamakan instance of class.
Misalkan, objek yang saya buat adalah gameA dan gameB, dimana gameA
menggunakan constructor pertama pada class Game dan gameB
menggunakan constructor kedua pada class Game,
3.3.12, Membuat ment dan perulangan menu
20 whale (brue)
2a <
22 men
23 out .printin ( ——<");
24. out princin(' MENU GAME eH
25, .out.printin ("\—————————") 7
26 .printiIn("1. Input Game A");
21 -printin("2. Input Game B");
28 -printin("3. Lihat Date Game"
29, sprintin("4, Keluaz");
30 -printIn(™ abs
a1
22
23
34 }
3.3.13, Membuat inputan yang diisi user
35/PBO(OOP)a
32
4
33
36
37
32
23
43)
aL
a
48
an
43
45
ar
48
43)
50
sL
52
53
ae
a9
40
a
42)
a
4
48
46
a
4
a8
so
s1
52)
53
System.out.print("Mesukkan pilinan anda (1 s/d 4): ")e
int pilin = Integer persefat (br.readLine()):
System.ous.printin |);
3.3.14, Mengecek inputan user
wicca Ga)
4
breaks
breaks
gefauie:
syecem.exie Gh»
:
3.3.15. Mengisi Case 1 (Input Game A)
case 1)
systesicut Beincin ("
System-cbt.prigtin(” INPUT GAME A");
Systemoutyprintin (" ye
Systeh, cHeprint ("Masukkan Kode : *):
Sciing kode = br.readzine(
Syscem-out.print ("Masukkan Nana : ")?
Scring nama = br.readLine();
Syavem.out.print (Masukkan Lisensi +");
String lisenst = pr.reaatane():
gameA ~ new Game (kode, nama, Lisensi) ;
Syatem.ouc. OF
System.oub. ("oo-Date Sane A teleh disimpan~
break;
Ketika user memilih inputan menu no, 1, maka dilakukan beberapa proses
sebagai berikut :
1. Line 41-49 : berisi permintaan inputan kode, nama, dan lisensi yang
nantinya akan diisi oleh user
36/PBO(OOP)st
ss.
56
57
se
6
a
a
6
6
66
6
«9
70
a
7
cy
2.
Line 50 : merupakan proses mentransfer data kode, nama, dan lisensi
pada tiap variabel dalam constructor pertama class Game. Setelah
berhasil, program akan mencetak tulisan --Data Game A telah
disimpan-- (Line 52).
3.3.16, Mengisi Case 2 (Input Game B)
Byer. cub peticang "2
systemourprancin("1e0T Gave B":
be ey
System.cut prine("Masakkan Fede + *)+
ode = br. eedzine |
Spathiae. point (MESH a 4 =]
nama = br. readLane(
Systen. out prine "Masukkan Lisensis =)
Lissette. ceanine 3
Syeten.cut-prine (*maeukran ff
string Jenis = br-readZine Qj
syeten. out print (“Masukcan THC + 9
String EIB ~ be.reeazane();
amen = nev Gene (r00famn, 1teened, jens, BBR) 1
Systen. cut printin(
Systen. out peinela(
meats
seo
a Gane B celah disiupan—-
Ketika user memilih inputan menit no, 2, maka dilakukan beberapa proses
sebagai berikut
Line 57-69 : berisi permintaan inputan kode, nama, dan lisensi, jenis,
ddan tipe yang nantinya akan diisi oleh user.
Line 70 : merupakan proses mentransfer data kode, mama, dan lisensi,
jenis, dan tipe pada tiap variabel dalam constructor kedua class Game.
Setelah berhasil, program ukan mencetak (ulisan —-Data Game B telah
disimpan--- (line 72).
37|PBO(OOP)3.3.17. Mengisi Case 3 (Lihat Data Game)
1s case 3
76 133 2
” System.cut-printin(
7 Sysvem.out-printin("
n Syatem.cut_prantin ("
e0 System.cut-prantin ("Gane A")?
an System. cut.printin ("sds Gans A: "+gameA.getKode (})
2] System.cul.printin ("lana Gane A: “+gameA.getMana(});
3 Systen,oub.printin("Lisensi Gane & :"+gameR.gecLisensi |):
ee System.cut.prantin("Jents Game & + "agamea. ane
85) Systen.cut.printin("Tips Gane A: "“+gameh.getTipe(}):
26 Syoten.cur-peintin();
07 System.oub.printin ("Gane 5");
te System.out.printin ("Koa Gan= 5 : "+games.gecKode ()):
2 System cur prantin (sans Gens S : "4games.gertana()):
90) System. out.printin("iisensi Gane 5 :"+games.getLasensi |))?
a System.out.printin(*Jenis Gane 5 : "+games! Ode
22 Systen.cot printin(*Tipe Gane 5 + "égameB.gatTépe (});
33) System. out .printin ("== "17
3 break
Ketika user memilih inputan menu no. 3, maka dilakukan beberapa proses
sebagai berikut :
1. Line 81-85 : mencetak isi data kodey
variabel gameA
sudah ada pada variabel gameB
3.3.18. Hasil Running Progtam
38/PBO(OOP)
Line 88-92 : mencetak isi data kode,
nama, dan lisensi sudah ada pada
nama, dan lisensi, jenis, dan tipe3.4. Latihan
1. In
jplementasikan class diagram berikut ini ke dalam sebuah program dengan
ketentuan
a.
Class mobil sebagai superclass (Kelas induk) berisikan atribut merk, wama,
jenis, Terdapat 2 buah constructor mobil, Constructor pertama tidak
memiliki parameter. Sedangkan constructor kedua memiliki parameter
untuk mengeset nilai merk, warna, dan jenis (ex : sport)
. Class honda sebagai subclass (kelas anak) berisi atribut tahun dengan nilai
default 0000. Terdapat 2 buah constructor honda. Constructor pertama
memiliki parameter untuk mengeset nilai merk, wama, dan jenis. Data merk,
wama, dan jenis diambil dari constructor kedua pada class mobil (gunakan
keyword super). Scdangkan constructor keduia memiliki parameter untuk
mengeset nilai merk, warna, jenis dan tahun berdasarkan inputan user. Data
merk, wama, dan jenis diambil dari setter pada class mobil (gunakan
keyword super).
c. Class test digunakant untuk menianggil class honda,
mobil
Sting merk
siting wana honda
Sng jonis int tahun
smebild ‘hondatiing merk, Sting warn Sting jens)
smiling mek, Sing warna, Sting nis) Upemsatelina mete Sofhawerne, Eira [ois ris)
+ satero + tor
+ gaten)
39|PBO(OOP