PEMROGRAMAN LANJUT - hermantolle.com file•This & super •Final Class, Final Method. Inheritance...

Post on 10-Jun-2019

222 views 0 download

Transcript of PEMROGRAMAN LANJUT - hermantolle.com file•This & super •Final Class, Final Method. Inheritance...

PEMROGRAMAN LANJUT

Program Teknologi Informasi & Ilmu Komputer, Universitas Brawijaya

KONSEP OOP:PEWARISAN / INHERITANCE

Dr. Eng. Herman Tolle

Informatika FILKOM UBSemester Genap 2015/2016

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 dikenaldengan istilah inheritance

• Namun setiap anak dapat memiliki sifat yang berbedadan 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

subClasssuperClass<< extends >>

• Hasil dari inheritance adalah class member padasuperClass 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 MobilBeraksi{

public static void main(String args[]){

Mobil sedan = new Mobil();

sedan.mesin = true;

sedan.kapasitas = 5;

sedan.Tahun = 2014;

sedan.jalan();

}

}

class Mobil extends Kendaraan

{

int Tahun;

String JenisMobil;

String Produsen;

}

• Class Mobil merupakan turunan dari class Kendaraan, sehingga class member dari Kendaraanotomatis diwariskan kepada Mobil

• Class Mobil tidak perlu mendefinisikan ulangseluruh class member tersebut, cukup menambahkan class member baru yg hanya ada pada Class Mobil saja.

class Kendaraan

mesin

kapasitas

jalan( )

berhenti( )

<< extends >>

class Mobil

mesin

kapasitas

jalan( )

berhenti( )

Manfaat Inheritance

• Pewarisan Sifat: Superclass ke Subclass

• Menyusun Hirarki

• Reusability: (Penggunaan kembali code) kodemethod bisa ditulis sekali saja dan dapat digunakanoleh semua subclass.

• Object Complexity: Subclass hanya perlumengimplementasikan perbedaannya sendiri daninduknya. 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 membangunJava 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

– MahasiswaUBMahasiswaFilkom

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 diaksesoleh semua class dimanapun class itu berada

• Class member yang memiliki modifier protected: dapatdiakses hanya oleh class-class yang berada dalam package yang sama dan sub-class pada package yang lain

• Class member tanpa modifier hanya dapat diakses olehclass-class dalam package yang sama

• Class member yang memiliki modifier private hanya dapatdiakses 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 Saja

class Coba

varA

varB

varC

varD

objek akses

varA

varB

varC

class Lagi

objek baca

varA

class Turunan

objek sifat

varA

varB

<< extends >>

<< import >>

• Class Saja, Turunan, dan Lagi tidak dapatmengakses varD karena varD bersifat privatesehingga hanya bisa diakses dari dalam class Coba

• Class Turunan dan Lagi tidak dapat mengaksesvarC karena varC bersifat package-private sehinggahanya bisa diakses dari dalam package prog

• Class Lagi tidak dapat mengakses varB karena varBbersifat protected sehingga hanya bisa diakses daridalam 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 functionagar 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 danmethod yang terdapat pada class itu sendiriContoh:

this.cetak()

• Keyword super mengacu pada atribut danmethod yang terdapat pada class parentnya.Contoh:

super.cetak()

Contoh this & superclass Parent{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

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 void CetakLuas()

{

System.out.printf(“Persegi dengan panjang = %d, dan Lebar = %d, Luas= %d”, panjang, lebar, this.hitungLuas());

}

}

public int getPanjang()

{

return panjang;

}

public int getLebar()

{

return lebar;

}

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();

}

}