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 superclass << extends >> subclass 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 mesin kapasitas jalan( ) berhenti( ) << extends >> class Mobil mesin kapasitas 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 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; // akses.varb = 3; // akses.varc = 5; // akses.vard = 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 = 1; // sifat.varb = 3; // sifat.varc = 5; // sifat.vard = 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 = 1; // baca.varb = 3; // baca.varc = 5; // baca.vard = 7; //
Ilustrasi kode program package prog class Coba vara varb varc << extends >> << import >> class Lagi objek baca vara vard class Saja objek akses class Turunan objek sifat vara varb vara 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
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();