PEMROGRAMAN LANJUT
Sistem Informasi PTIIK UB
Semester Genap 2014/2015
KONSEP OOP:
PEWARISAN / INHERITANCE
Dr. Eng. Herman Tolle
Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya
Outline Keyword
Inheritance
Superclass
Subclass
Extends
Reusability
Override
This & super
Final Class, Final Method
Inheritance (Pewarisan)
Pewarisan suatu class pada class lainnya
Seorang ayah dapat mewariskan beberapa sifat yang
sama pada anak-anaknya, konsep tersebut dikenal
dengan istilah inheritance
Namun setiap anak dapat memiliki sifat yang berbeda
dan tidak dimiliki oleh ayah maupun saudara-
saudaranya
Suatu class dapat mewariskan class member (atribut
dan method) kepada class lain
Inheritance (Pewarisan)
Inheritance | Inheritans | Pewarisan
Suatu class dapat mewariskan atribut dan method
kepada class lain (subclass), serta membentuk class
hierarchy
Penting untuk Reusability
Java Keyword:
extends
Syntax Inheritance
class subClass extends superClass {
// definisi class
}
subClass nama class turunan yang kita
buat, merupakan sub-class dari sebuah class
lain
superClass class yang kita ingin wariskan
sifat-sifatnya ke class baru yang kita buat
Ilustrasi Inheritance
superClass subClass
<< extends >>
Hasil dari inheritance adalah class member pada
superClass akan diwariskan kepada subClass
Sehingga subClass juga memiliki class member
yang sama dengan superclass
Merupakan hubungan Generaliasasi (is-A) (tanda
panah dengan segitiga full)
Contoh inheritance
class Kendaraan{ class Mobil extends Kendaraan
boolean mesin; {
int kapasitas;
int Tahun;
void jalan(){ String JenisMobil;
} String Produsen;
}
void berhenti(){
}
}
class MobilBeraksi{
public static void main(String args[]){
Mobil sedan = new Mobil();
sedan.mesin = true;
sedan.kapasitas = 5;
sedan.Tahun = 2014;
sedan.jalan();
}
}
class Kendaraan class Mobil
mesin mesin
kapasitas kapasitas
<< extends >>
jalan( ) jalan( )
berhenti( ) berhenti( )
Class Mobil merupakan turunan dari class
Kendaraan, sehingga class member dari Kendaraan
otomatis diwariskan kepada Mobil
Class Mobil tidak perlu mendefinisikan ulang
seluruh class member tersebut, cukup
menambahkan class member baru yg hanya ada
pada Class Mobil saja.
Manfaat Inheritance
Pewarisan Sifat: Superclass ke Subclass
Menyusun Hirarki
Reusability: (Penggunaan kembali code) kode
method bisa ditulis sekali saja dan dapat digunakan
oleh semua subclass.
Object Complexity: Subclass hanya perlu
mengimplementasikan perbedaannya sendiri dan
induknya. Objek yang kompleks dapat dibangun
dari kumpulan objek lain yang lebih sederhana
Semua Class adalah turunan Kelas Object
Dalam Java, semua class, termasuk class yang membangun
Java API, adalah subclassesdari superclass Object.
Tipe Inheritans
Catatan: java hanya mengenal single superclass tidak ada
multiple superclass
Access level pada class member
Modifier Class Package Sub-class Class lain
public Ya Ya Ya Ya
protected Ya Ya Ya Tidak
tanpa modifier Ya Ya Tidak Tidak
private Ya Tidak Tidak Tidak
Access level pada class member
Class member yang memiliki modifier public dapat diakses
oleh semua class dimanapun class itu berada
Class member yang memiliki modifier protected: dapat
diakses hanya oleh class-class yang berada dalam package
yang sama dan sub-class pada package yang lain
Class member tanpa modifier hanya dapat diakses oleh
class-class dalam package yang sama
Class member yang memiliki modifier private hanya dapat
diakses dari dalam class tersebut saja
//program 9.3a. Nama file:Coba.java
package prog;
public class Coba{
public int varA;
protected int varB;
int varC;
private int varD;
public static void main(String args[]){
Coba buat = new Coba();
buat.varA = 1; //sukses
buat.varB = 3; //sukses
buat.varC = 5; //sukses
buat.varD = 7; //sukses
}
}
//program 9.3b. Nama file:Saja.java
package prog;
class Saja{
public static void main(String args[]){
Coba akses = new Coba();
akses.varA = 1; //sukses
akses.varB = 3; //sukses
akses.varC = 5; //sukses
akses.varD = 7; //error
}
}
//program 9.3c. Nama file:Turunan.java
import prog.Coba;
class Turunan extends Coba{
public static void main(String args[]){
Turunan sifat = new Turunan();
sifat.varA = 1; //sukses
sifat.varB = 3; //sukses
sifat.varC = 5; //error
sifat.varD = 7; //error
}
}
//program 9.3d. Nama file:Lagi.java
import prog.Coba;
class Lagi{
public static void main(String args[]){
Coba baca = new Coba();
baca.varA = 1; //sukses
baca.varB = 3; //error
baca.varC = 5; //error
baca.varD = 7; //error
}
}
Ilustrasi kode program
package prog
class Lagi
class Coba
<< import >> objek baca
varA
varA
varB
<< extends >>
varC
varD
class Saja class Turunan
objek akses objek sifat
varA varA
varB varB
varC
Class Saja, Turunan, dan Lagi tidak dapat
mengakses varD karena varD bersifat private
sehingga hanya bisa diakses dari dalam class Coba
Class Turunan dan Lagi tidak dapat mengakses
varC karena varC bersifat package-private sehingga
hanya bisa diakses dari dalam package prog
Class Lagi tidak dapat mengakses varB karena varB
bersifat protected sehingga hanya bisa diakses dari
dalam package prog atau dari class yang
merupakan sub-class Coba
Overriding Method dalam Inheritans
Anak kadang sedikit berbeda dari bapaknya
Overriding adalah membuat method yang menggantikan
method induknya.
Jadi method yang sudah diturunkan dari kelas induk kita
(superclass), kita buat lagi dengan nama yang sama tapi
dengan isi yang berbeda pada kelas turunan (subclass).
Dalam java dikenal dengan penambahan kata
kunci @override .
Teknik ini digunakan untuk mengubah definisi dari function
agar lebih spesifik dan sesuai dengan sub-class yang dirancang
// program 9.4. contoh overriding
class Kendaraan{
boolean mesin;
int kapasitas;
void jalan(){
System.out.println("kendaraan dijalankan");
}
void berhenti(){}
}
class Mobil extends Kendaraan{
@Override
void jalan(){
System.out.println("masukkan kunci");
System.out.println("putar kunci");
System.out.println("injak gas");
}
public Class MobilBeraksi
{
public static void main(String args[]){
Mobil sedan = new Mobil();
sedan.jalan();
}
}
Kelas Mobil dan Kelas Kendaraan sama-sama memiliki fungsi
jalan()
Fungsi jalan() pada kelas Mobile meng-override fungsi jalan()
dari kelas induknya
Pemanggilan fungsi jalan() dari objek Mobil akan
mengeksekusi fungsi jalan() dari kelas Mobil (subclass) bukan
fungsi jalan yang ada pada kelas Kendaraan (superclass)
this vs super
Keyword this mengacu pada atribut dan
method yang terdapat pada class itu sendiri
Contoh:
this.cetak()
Keyword super mengacu pada atribut dan
method yang terdapat pada class parentnya.
Contoh:
super.cetak()
class Parent{ Contoh this & super
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); // Tuliskan output dari perintah ini!
}
}
Final Class
Class yang tidak boleh di extends lagi dapat
dibuat dengan menambahkan keyword final
Contoh:
public final class KelasFinal {...}
Contoh final class dalam java package:
java.lang.System
java.lang.String
Final Method
Method yang tidak dapat di override oleh
sub class
Contoh deklarasi:
public final void contohFinalMethod()
{...}
Final Variabel
Variabel Final adalah variabel yang hanya
dapat diinisialisasi satu kali saja.
Contoh deklarasi:
public final double nilaiEuler;
Latihan
Buat 2 buah kelas berikut
Kelas Induk: Persegi
Atribut: panjang, lebar
Method: HitungLuas, set-get
Kelas Turunan: Kotak
Atribut: tinggi
Method: HitungLuas (override), HitungVolume