Inheritance merupakan konsep hierarki hubungan antara kelas orangtua (superclass) dan anak (subclass). Subclass mewarisi atribut dan metode superclass kecuali yang dioverride. Kelas abstrak memaksa subclass untuk mengimplementasikan metode tertentu.
2. INHERITANCE
Konsep Hierarki, Hubungan orangtua dan
anak.
Sub Class / ChildSub Class / Child
[public] class SubKelas extends
SuperKelas {
....
}
Bentuk Umum Penulisannya
Java hanya mengenal dan menunjang
single inheritance.
NOTE
Super Class / Parent
3. Konsep hubungan antar super class dan
subclass
Kelas dengan modifier “final” tidak dapat dijadikan super-kelas.
Atribut dan metode yang bukan-private secara otomatis diwariskan ke sub-kelas kecuali yang di-override
(dideklarasi ulang oleh sub-kelas).
Jika metode di definisikan ulang pada sub-kelas dengan parameter yang sama pada super-kelas, Ini disebut
dengan “override” metode yang ada pada super-kelasnya.
Konstruktor tidak diwariskan, tetapi dapat dipanggil atau dijalankan pada konstruktor di sub-kelas dengan
menggunakan bentuk super(parameter).
Jika ada sebuah atribut dengan nama sama dengan nama atribut yang ada pada super-kelasnya, atribut yang
di super-kelas tetap ada tetapi disembunyikan. Untuk mengakses atribut yang tersembunyikan gunakan kata-
kunci prefiks “super”.
4. public class Hewan {
public int Kaki;
public void makan() {
System.out.println(“Hewan Butuh Makan”)
}
}
Superclass
public class Kuda extends Hewan {
Kuda(int kaki){
Kaki = 4;
}
}
Example
SubClass
Hewan
Kuda Kucing
5. OVERLOADING
Metode dimana dalam satu kelas yang namanya
sama tetapi berbeda signature-nya (parameternya).
Overload Konstruktor
OVERIDING
Dua metode dimana yang satu di super-kelas dan
satunya di sub-kelas dengan nama yang sama, tipe
data hasil sama, dan signature (atau parameter) yang
sama juga
Override toString() dan equals()
6. public class Mahasiswa{
private int nomorInduk;
private String nama;
private double ipk;
public Mahasiswa(int ni, String nm,
double ip){
nomorInduk = ni;
nama = nm;
ipk = ip;
}
public Mahasiswa(int ni, String nm){
nomorInduk = ni;
nama = nm;
ipk = 0.0;
}
public void keterangan(){
System.out.println(“Belum Lulus”);
}
....
}
Super Class Sub Class
public class MahasiswaPasca extends
Mahasiswa{
private String penelitian;
private String dosenPembimbing;
public void keterangan(){
System.out.println(“LULUS”);
}
.....
}
Note :
Warna Merah Overloading
Warna Biru Overiding
7. Konstruktor Sub Kelas
Untuk menginisialisasi atribut obyek yang ada pada super-
kelas, konstruktor sub-kelas harus memanggil sebuah
konstruktor dari super-kelas dengan bentuk:
Super(parameter)
Note:
Statemen ini harus dilakukan paling awal
public class MahasiswaPasca extends Mahasiswa{
private String penelitian;
private String dosenPembimbing;
public MahasiswaPasca(int nim, String
nama, String bs, double ipk, String
penelitian, String dp){
super(nim,nama,bs,ipk);
this.penelitian = penelitian;
this.dosenPembimbing = dp;
}
.....
}
8. Polymorphism
Dapat meningkatkan generalisasi program
dan kemudahan dibaca.
Upcasting Downcasting
Mereferensi obyek dari jenis sub-kelas dengan deklarasi variabel
menggunakan jenis super-kelas
Sebuah obyek dibuat dengan super-Kelas namun direferensi
oleh variabel dengan tipe kelas sub-Kelas.
SuperKelas obyek = new SubKelas(parameter);
SuperKelas obyekSuper = new SuperKelas(parameter);
SubKelas obyekSub = (SubKelas) obyekSuper;
Jika obyekSub mengakses metode yang hanya ada pada sub-kelas, karena jenis referensinya adalah SubKelas,
maka tidak akan menghasilkan compile-error. Tetapi hal ini dapat menimbulkan runtime-error berupa
“java.lang.ClassCastException”.
if(obyekSub instanceOf SubKelas) {
obyekSub.metodeSubKelas(parameter);
}
9. Class Kucing extends Hewan {
Public void suara() {
System.out.println(“Meow”);
}
}
SubClass
Class Program {
Public static void main(String args []) {
Hewan kuda = new kuda();
Hewan kucing = new kucing();
Kuda.suara();
Kucing.suara();
}
MainClass
public class Hewan {
public void tidur(){
System.out.println("Tidur");
}
}
SuperClass
class Program {
public static void main (String args []){
Hewan kambing = new Hewan();
Kambing kb = (Kambing) kambing;
kb.tidur();
}
MainClass
10. Kelas Abstrak
Di sub-kelas, kita boleh (opsional) melakukan
override terhadap metode yang ada pada
super-kelas. Tetapi adakalanya di mana ada
situasi di mana super-kelas akan memaksa
agar sub-kelas meng-override metode
tertentu, karena metode tersebut tidak dapat
diimplementasikan pada super-kelas.
Karyawan
nomorIndukKaryawan
menghitungGaji()
Dosen
jumlahSKS
honorSKS
menghitungGaji()
Staff
gajiPokok
totalJam
menghitungGaji()
11. public abstract class Karyawan {
public Karyawan(int nik, String nama){
this.nomorIndukKaryawan = nik;
this.nama = nama;
}
...
public abstract double menghitungGaji();
...
} Kelas Abstrak
public class Staff extends Karyawan{
public double menghitungGaji(){
double gaji = 0.0;
if(totalJam > 180) {
gaji = (180 * gajiPokok) +
((totalJam - 180) * (1.5 *
gajiPokok));
} else {
gaji = totalJam * gajiPokok;
}
return gaji/180.0;
}
...
}
SubClass
public class Dosen extends Karyawan {
public double menghitungGaji(){
double gaji = jumlahSKS * 4.5 *
honorSKS;
return gaji;
}
...
}
Kita tidak boleh membuat obyek dari jenis kelas abstrak
Karyawan ahmad = new Karyawan(65321,”Ahmad”);
Boleh digunakan sebagai referensi (atau variabel) yang merujuk pada
sub-kelas yang bukan abstrak
Karyawan ahmad = new Staff(65321,”Ahmad”);
Salah satu fitur yang sangat baik dari Java adalah kegunaan kembali (re-usability). Jika sebuah kelas sudah didefinisikan dan dibuat, kelas tersebut dapat digunakan oleh aplikasi apapun ketika metode-metode dibutuhkan.
Jika kita hendak membuat sebuah kelas, sementara ada kelas yang sudah ada dan memilik fitur-fitur yang hampir (atau mendekati) kebutuhan yang kita harapkan, kita tidak harus membuat Kelas dari awal lagi, melainkan kita memanfaatkan kelas yang sudah ada dan menambahkan atau mengubah beberapa atribut dan/atau metode tambahan.
Merupakan metode untuk mengimplementasikan hierarki
public class Test {
public static void main (String args []){
Binatang binatang1 = new Kambing();
Kambing kambing = (Kambing) binatang1;
kambing.bergerak();
kambing.makan();
Binatang binatang2 = new Sapi();
Sapi sapi = (Sapi) binatang2;
sapi.bergerak();
sapi.makan();
}
}
public class Peternak { public void memberiMakan(Binatang a){ a.bergerak(); a.makan(); if (a instanceof Kambing){ Kambing kambing = (Kambing) a; kambing.makan(); } } }