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 saudarasaudaranya • 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 subClass
superClass << 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{ boolean mesin; int kapasitas; void jalan(){ } void berhenti(){ }
class Mobil extends Kendaraan { int Tahun; String JenisMobil; String Produsen; }
} 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
jalan( ) berhenti( )
<< extends >>
jalan( ) 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 tanpa modifier
Ya Ya
Ya Ya
Ya Tidak
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 buat.varB buat.varC buat.varD }
}
= = = =
1; 3; 5; 7;
//sukses //sukses //sukses //sukses
//program 9.3b. Nama file:Saja.java package prog; class Saja{ public static void main(String args[]){ Coba akses = new Coba(); akses.varA akses.varB akses.varC akses.varD
} }
= = = =
1; 3; 5; 7;
//sukses //sukses //sukses //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 sifat.varB sifat.varC sifat.varD
} }
= = = =
1; 3; 5; 7;
//sukses //sukses //error //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 baca.varB baca.varC baca.varD
} }
= = = =
1; 3; 5; 7;
//sukses //error //error //error
Ilustrasi kode program package prog class Lagi
class Coba
<< import >> varA
varA
varB
<< extends >> varC varD
class Saja
class Turunan objek sifat
objek akses
varA
varA
varB
varB
varC
objek baca
• 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{ public int x = 5; }
Contoh this & super
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