Inheritance
Inheritance
Pengertian inheritance Deklarasi inheritance Single inheritance Multilevel inheritance Access Control Konstruktor tidak diwariskan super keyword
tiga konsep dasar OOP. Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat mempunyai entitas/obyek turunan. Dengan konsep inheritance, sebuah class dapat mempunyai class turunan.
parent class atau base class. Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class. Suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent class.
Deklarasi inheritance
Dengan menambahkan kata kunci extends setelah
deklarasi nama class, kemudian diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class.
Deklarasi inheritance
public class B extends A { }
subclass dari class super induk yang bernama Object. Misalnya saja terdapat sebuah class sederhana : public class A { }
membacanya sebagai subclass dari class Object. public class A extends Object { }
jumpai ada suatu class yang dapat diperluas dari class lain.
mempunyai data member yang identik sama dengan class Pegawai, hanya saja ada tambahan data member departemen. Sebenarnya yang terjadi disana adalah class Manajer merupakan perluasan dari class Pegawai dengan tambahan data member departemen. Disini perlu memakai konsep inheritance, sehingga class Manajer dapat kita tuliskan seperti berikut
Single Inheritance
Konsep inheritance yang ada di Java adalah Java hanya memperkenankan adanya single inheritance.
Konsep single inheritance hanya memperbolehkan suatu sublass mempunyai satu parent class.
Multilevel Inheritance
Konsep inheritance yang ada di Java memperkenankan
adanya multilevel inheritance. Konsep multilevel inheritance memperbolehkan suatu subclass mempunyai subclass lagi.
Manajer.
Kontrol pengaksesan
Dalam dunia riil, suatu entitas induk bisa saja tidak
mewariskan sebagian dari apa-apa yang ia punyai kepada entitas turunan karena sesuatu hal. Demikian juga dengan konsep inheritance dalam OOP. Suatu parent class dapat tidak mewariskan sebagian member-nya kepada subclass-nya. Sebagai contoh, kita coba untuk memodifikasi class Pegawai.
Coba untuk mengkompilasi class Manajer pada contoh sebelumnya. Apa yang terjadi? Pesan kesalahan akan muncul seperti ini :
Manajer.java:5: nama has private access in Pegawai nama=n;
Kontrol pengaksesan
private
Variabel dan method yang dideklarasikan private
hanya bisa diakses oleh class yg mendeklarasikan variabel dan method tersebut.
Default
Bukan merupakan Java keyword. Merupakan jenis akses kontrol jika kita tidak menuliskan akses kontrol secara eksplisit. Semua feature class-class yang ada dalam satu package bisa diakses oleh semua yang ada dalam package tersebut. Class diluar package boleh melakukan subclass, tetapi subclass tersebut tidak bisa mengakses feature superclass.
Example1: default
1. package sportinggoods; 2. class Ski { 3. void applyWax() { . . . } 4. }
default access
1. package sportinggoods; 2. class DownhillSki extends Ski { 3. void tuneup() { 4. applyWax(); OK 5. // other tuneup functionality here 6. } 7. }
Example1: default
1. package sportinggoods; 2. class Ski { 3. void applyWax() { . . . } 4. }
default access
1. package differentPackage; 2. class DownhillSki extends Ski { 3. void tuneup() { 4. applyWax(); error 5. // other tuneup functionality here 6. } 7. }
protected
Protected mempunyai kemampuan akses yang lebih besar daripada private dan default.
Protected feature dari suatu class bisa diakses oleh semua class dalam satu package. Class diluar package boleh melakukan melakukan subclass, dan subclass tersebut bisa mengakses feature superclass.
Example: protected
1. // 2. 3. 4. package adifferentpackage; // Class Ski now in a different package class Ski { protected void applyWax() { . . . } }
1. package sportinggoods; 2. class DownhillSki extends Ski { 3. void tuneup() { 4. applyWax(); OK 5. // other tuneup functionality here 6. } 7. }
parent class. Sebagaimana kata kunci this yang dipakai untuk merujuk pada member dari class itu sendiri. Format penulisannya adalah sebagai berikut :
super.data_member
merujuk pada data member pada parent class super.function_member() merujuk pada function member pada parent class super() merujuk pada konstruktor pada parent class
Contoh
class Parent { public int x = 5; } class Child extends Parent { public int x = 10; public void Info(int x) { System.out.println("Nilai x sebagai parameter = " + x); System.out.println("Data member x di class Child = " + this.x); System.out.println("Data member x di class Parent = " + super.x); } }
public class NilaiX { public static void main(String args[]) { Child tes = new Child(); tes.Info(20); } }
Hasil
Nilai x sebagai parameter = 20
Data member x di class Child = 10 Data member x di class Parent = 5
Kesimpulan
x merujuk pada x terdekat, yaitu parameter Info() this.x merujuk pada data member dari class-nya sendiri, yaitu data member pada class Child super.x merujuk pada data member dari parent classnya, yaitu data member pada class Parent
maka kompiler Java akan menambahkan deklarasi pemanggilan konstruktor parent class di konstruktor subclass.
class Child
Contoh
public class Parent { String parentName;