Pengertian
dasar inheritance
- Inheritance
(Pewarisan) merupakan salah satu dari 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
pewarisan merupakan mekanisme / cara membuat kelas baru dari kelas yang sudah ada
- kelas yang sudah ada ===> superclass/parent class
- kelas turunan ===> subclasss
Kita
baru perlu menerapkan
inheritance pada saat kita jumpai ada suatu
class yang dapat diperluas dari
class lain

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
contoh lain
- membuat class B dari class A
Class B extends A{
//.......
}
- membuat class C dari class B
Class C extends B {
//.....
}
Semua
class di dalam Java
adalah merupakan
subclass dari
class super induk yang
bernama Object
Misalnya saja terdapat sebuah
class sederhana :
public class A {
…
}
Pada saat dikompilasi, Kompiler Java
akan membacanya sebagai
subclass dari
class Object.
public class A extends Object {
…
}
Misal terdapat class Pegawai
public class Pegawai {
public String nama;
public double gaji;
}
Misal terdapat class Manager
public class Manager {
public String nama;
public double gaji;
public String departemen;
}
Bisa di lebih sederhanakan menjadi
public class Manager extends Pegawai {
public String departemen;
}
Single Inheritance
Konsep
inheritance yang ada di Java hanya memperkenankan adanya single inheritance, yaitu
suatu sublass hanya
dapat mempunyai satu
parent class.
Dengan kata lain, suatu class hanya dapat
meng-extend
satu
class saja.
Jika
dibutuhkan adanya multiple inheritance (satu
class memiliki lebih dari satu parent class) maka solusinya dapat menggunakan interface. (next
topic)
Multilevel Inheritance
Konsep
inheritance yang ada di
Java juga memperkenankan adanya multilevel
inheritance
Konsep
multilevel inheritance memperbolehkan suatu
subclass mempunyai
subclass lagi
Director => Manager => Employee = merupakan gambaran dari multilevel inheritance
Engineer => Employee = single inheritance
Secretary => Employee = single inheritance
Pengaksesan
member yang dideklarasikan
di parent class dari
subclass
Pengaksesan
member yang ada di
parent class dari
subclass-nya tidak berbeda dengan pengaksesan
member subclass itu sendiri.
Misalnya di
class Manajer kita ingin mengakses data
member nama melalui sebuah
function member IsiData(), sekaligus kita juga ingin mengakses data
member departemen di
class Manajer.
public
class Manajer
extends Pegawai {
public String departemen;
public void IsiData(String
n, String d) {
nama=n;
departemen=d;
}
}
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.
- Hal
ini dipengaruhi oleh access
modifier.
public
class Pegawai {
private String nama;
public double gaji;
}
Coba untuk mengkompilasi
class Manajer pada contoh sebelumnya Apa yang
terjadi?
Pesan kesalahan akan muncul seperti ini :
Ini membuktikan bahwa
class Manajer tidak mewarisi data
member nama dari
parent class-nya (Pegawai).
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.
contoh dari protected
1. package adifferentpackage; // Class Ski now in
// a different package
2. Public class Ski {
3. protected void applyWax() { . . . }
4. }
1. Public package sportinggoods;
2. class DownhillSki extends Ski {
3. void
tuneup() {
4. applyWax(); à OK
5. //
other tuneup functionality here
6. }
7. }
Konstruktor
tidak diwariskan
Konstruktor dari
parent class tidak dapat diwariskan ke
subclass-nya, Konsekuensinya, setiap kali
kita membuat suatu
subclass, maka kita harus memanggil konstruktor
parent class, •Pemanggilan konstruktor
parent harus dilakukan pada baris pertama dari konstruktor
subclass, Jika kita tidak mendeklarasikannya secara eksplisit, maka kompiler Java
akan menambahkan deklarasi pemanggilan konstruktor
parent class di konstruktor
subclass.
Sebelum
subclass menjalankan konstruktornya sendiri,
subclass akan menjalankan
constructor superclass terlebih dahulu, Hal
ini terjadi karena secara implisit pada
constructor subclass ditambahkan pemanggilan super()yang bertujuan memanggil constructor superclass oleh kompiler
Constructor pada
inheritance
public class Person {
protected
String name;
protected
String address;
public
Person(){
System.out.println(“Inside Person:Constructor”);
}
}
public class Student extends Person
{
public
Student(){
System.out.println(“Inside Student:Constructor”);
}
}
Alur Eksekusi
Constructor
Ketika sebuah
object Student diinstansiasi, default
constructor dari
superclass Student dipanggil secara implisit untuk melakukan inisialisasi seperlunya, Setelah itu, pernyataan di dalam
constructor subclass baru dijalankan
Istilah yang ada pada Inheritance
Extends
Keyword ini harus kita tambahkan pada definisi class yang menjadi subclass.
Superclass
Superclass 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 memanggil konstruktor dari superclass atau menjadi variabel yang mengacu pada superclass.
Methode Overriding
Pendefinisian ulang method yang sama pada subclass
Dalam inheritance, method overriding berbeda dengan method overloading. Kalau method overriding adalah mendefinisikan kembali method yang sama, baik nama method maupun signature atau parameter yang diperlukan dalam subclass, kalau method overloading adalah mendefinisikan method yang memiliki nama yang sama, tetapi dengan signature yang berbeda dalam definisi class yang sama.
Contoh program inheritance......
buat class BangunRuang sebagai parent
public class BangunRuang{
private String nama;
public String getNama (){
return nama;
}
public void setNama (String nama){
this.nama="==<Bangun" +nama+">==";
}
public void cetak (){
System.out.println(nama);
}
}
class ProgramMatematika
public class ProgramMatematika{
public static void main (String []args){
segitiga obj1 = new segitiga();
obj1.setNama("Segitiga");
obj1.setLuas(15,30);
obj1.setKeliling(30);
obj1.cetak();
persegi obj2 = new persegi();
obj2.setNama("Persegi");
obj2.setLuas(15);
obj2.setKeliling(15);
obj2.cetak();
lingkaran obj3 = new lingkaran();
obj3.setNama("Lingkaran");
obj3.setLuas(14);
obj3.setKeliling(14);
obj3.cetak();
persegipanjang obj4 = new persegipanjang();
obj4.setNama("Persegi Panjang");
obj4.setLuas(8,4);
obj4.setKeliling(8,4);
obj4.cetak();
jajargenjang obj5 = new jajargenjang();
obj4.setNama("Jajar Genjang");
obj4.setLuas(12,4);
obj4.setKeliling(5,12);
obj4.cetak();
}
}
dan bangun ruangnya sebagai child class contoh class segitiga
public class segitiga extends BangunRuang{
private double luas;
private double tinggi;
private double alas;
private double keliling;
public void setLuas(double tinggi, double alas){
this.tinggi = tinggi;
this.alas = alas;
luas = tinggi * alas /2;
}
public void setKeliling( double alas){
this.alas = alas;
keliling = alas + alas +alas;
}
@Override
public void cetak(){
super.cetak();
System.out.println("Luas segitiga dengan alas "
+alas+ " dan tinggi " +tinggi+" adalah = " +luas);
System.out.println("Keliling segitiga dengan alas "
+alas+ " adalah = " +keliling);
System.out.println("=========================");
}
}
setelah dibuat simpan di dalam folder yang sama
- javac terlebih dahulu ketiga class di atas
- dan jalan kan yang class ProgramMatematika
Referensi :
http://mungjava.blogspot.co.id/2009/05/memahami-konsep-inheritance-pewarisan.html
https://fajarah.wordpress.com/share/
maaf kalau ada salah kata ataupun kurang.......
samapai bertemu lagi di post selanjutnya
#Ikhsanulanwarp