PEMROGRAMAN LANJUT - hermantolle.com file•This & super •Final Class, Final Method. Inheritance...
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();
}
}