PEMROGRAMAN LANJUT Informatika FILKOM UB Semester Genap 2015/2016
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
LATIHAN • Buat contoh kelas induk dan kelas turunan: – Person Student – MahasiswaUB MahasiswaFilkom
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;
// // // //
//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;
// // // //
//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;
// // // //
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
OVERLOADING METHOD IN INHERITANCE
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
class Persegi { private int panjang; private int lebar; public Persegi(int P, int L){ this.panjang = P; this.lebar = L; } public int hitungLuas() { return panjang*lebar; }
public int getPanjang() { return panjang; } public int getLebar() { return lebar; }
public void CetakLuas() { System.out.printf(“Persegi dengan panjang = %d, dan Lebar = %d, Luas = %d”, panjang, lebar, this.hitungLuas()); } }
class Kotak extends Persegi { private int tinggi; public Kotak(int P, int L, int T){ super(P, L); this.tinggi = T; } public int hitungVolume() { return super.hitungLuas()*tinggi;
}
@override public int hitungLuas() { int Luas = (2 * super.hitungLuas()) + (2 * getPanjang()* tinggi) + (2 * getLebar() * tinggi); return Luas; } @override public void CetakLuas() {}
class KotakBeraksi { public static void main(String[] arg) { Persegi Box1 = new Persegi(5, 10); Box1.CetakLuas(); Kotak Box2 = new Kotak(5, 10, 8); Box2.CetakLuas(); } }