Inheritance (Pewarisan) As’ad Djamalilleil http://kampusku.my.id asad.kom@gmail.com
Sekilas tentang pewarisan 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 saudara-saudaranya, konsep ini dikenal dengan polymorphism
Inheritance adalah salah satu fitur pada Java yang digunakan untuk membuat beberapa class turunan (sub-class) dari sebuah class lain (super-class) Setiap sub-class dapat memiliki perbedaan bentuk (morph) di antara sub-sub class yang lain pada level yang sama Bentuk yang dimaksud adalah class member yang dimiliki oleh class tersebut
class member dari class Gelas Class member diartikan sebagai property dan function yang dimiliki oleh sebuah class Class Gelas tinggi diameter kosong warna pegangan diisi( ) diminum( ) dipecahkan( ) isiMaksimum( ) class member dari class Gelas
Syntax Inheritance class subClass extends superClass { // definisi class } Keterangan: 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 subClass << extends >> Hasil dari inheritance adalah class member pada superClass akan diwariskan kepada subClass Sehingga subClass JUGA memiliki class member yang sama dengan superClass (bergantung dari modifier yang diberikan)
Contoh kode dengan inheritance (9.1) class Kendaraan{ boolean mesin; int kapasitas; void jalan(){ } void berhenti(){ class Mobil extends Kendaraan{ public static void main(String args[]){ Mobil sedan = new Mobil(); sedan.mesin = true; sedan.kapasitas = 5; sedan.jalan(); sedan.berhenti();
<< extends >> Ilustrasi program 9.1 class Kendaraan mesin kapasitas jalan( ) berhenti( ) class Mobil mesin kapasitas jalan( ) berhenti( ) << extends >> Class Mobil merupakan turunan dari class Kendaraan, sehingga class member dari Kendaraan diwariskan kepada Mobil Class Mobil tidak perlu mendefinisikan ulang seluruh class member tersebut karena secara otomatis dimiliki oleh class Mobil
Sebelum menggunakan inheritance lebih jauh, ada baiknya kita pelajari terlebih dahulu tentang access level berupa beberapa macam modifier Modifier dapat digunakan untuk mengendalikan akses terhadap class maupun class member di dalam class tersebut
Access level sebuah class Modifier Package Sub-class Class lain public Ya tanpa modifier Tidak
Class yang memiliki modifier public dapat terlihat oleh semua class lain Class yang tidak memiliki modifier (diistilahkan juga dengan package-private) hanya dapat terlihat oleh class-class yang berada dalam package yang sama dengan class tersebut
Contoh class modifier public //program 9.2a //nama file:Coba.java //class Coba berada //dalam package prog package prog; public class Coba{ }
//program 9.2b //nama file:Saja.java //class ini berada dalam package yg sama //dengan class Coba package prog; class Saja{ public static void main(String args[]){ Coba akses = new Coba(); }
//program 9.2c //nama file:Turunan.java //class ini berada di luar package prog //dan merupakan turunan dari class Coba import prog.Coba; class Turunan extends Coba{ }
//program 9.2d //nama file:Lagi.java //class ini berada di luar package prog import prog.Coba; class Lagi{ public static void main(String args[]){ Coba baca = new Coba(); }
Ilustrasi kode program 9.2 package prog << import >> class Lagi public class Coba class Turunan class Saja << extends >> Class Coba dapat diakses oleh class di luar package prog karena class Coba bersifat public
Class tanpa modifier Apabila program 9.2a kita modifikasi dengan menghilangkan modifier public, maka class Coba secara default akan dianggap memiliki modifier package-private Hasilnya adalah class Lagi dan Turunan tidak dapat lagi mengakses class Coba karena kedua class tersebut berada di luar dari package prog (package dimana class Coba tersimpan)
<< import >> << extends >> package prog << import >> class Lagi class Coba class Turunan class Saja << extends >> Class Coba tidak dapat diakses oleh class di luar package prog karena class Coba tidak memiliki modifier atau diistilahkan dengan package-private
Access level pada class member Modifier Class Package Sub-class Class lain public Ya protected Tidak tanpa modifier private
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 Amati contoh kode program 9.3
//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; //sukses akses.varB = 3; //sukses akses.varC = 5; //sukses akses.varD = 7; //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 = 1; //sukses sifat.varB = 3; //sukses sifat.varC = 5; //error sifat.varD = 7; //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 = 1; //sukses baca.varB = 3; //error baca.varC = 5; //error baca.varD = 7; //error }
Ilustrasi kode program 9.3 package prog class Lagi objek baca varA class Coba varA varB varC varD << import >> << extends >> class Saja class Turunan objek sifat varA varB objek akses 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
Over-riding Over-riding terjadi bila sebuah function yang merupakan warisan dari super-class dialihkan (over-ride) atau didefinisi ulang isinya sehingga tidak lagi berisi definisi asli Teknik ini digunakan untuk mengubah definisi dari function agar lebih spesifik dan sesuai dengan sub-class yang dirancang Berikut adalah contoh over-riding (9.4)
// program 9.4. contoh over-riding class Kendaraan{ boolean mesin; int kapasitas; void jalan(){ System.out.println("kendaraan dijalankan"); } void berhenti(){} class Mobil extends Kendaraan{ System.out.println("masukkan kunci"); System.out.println("putar kunci"); System.out.println("injak gas");
public static void main(String args[]){ Mobil sedan = new Mobil(); sedan.jalan(); }
Class Kendaraan memiliki function jalan() dengan definisi tertentu Class Mobil merupakan sub-class dari class Kendaraan Pada class Mobil, definisi function jalan() yang baru meng-over-ride function jalan() dari class Kendaraan, sehingga apabila dijalankan maka akan memberikan output yang berbeda dengan function di super-class-nya
Polymorphism Poly banyak. Morph bentuk Polymorphism adalah teknik di Java yang berhubungan erat dengan inheritance Polymorphism diartikan sebagai beberapa sub-class yang berasal dari super-class yang sama namun memiliki karakteristik/bentuk yang berbeda di antara sub-sub class tersebut Perhatikan kode program 9.5 berikut:
//program 9.5. contoh polymorphism class Kendaraan{ boolean mesin; int kapasitas; void jalan(){} void berhenti(){} } class Mobil extends Kendaraan{ void injakRem(){} class SepedaMotor extends Kendaraan{ boolean standard; void gantiOli(){}
<< extends >> << extends >> class Kendaraan mesin kapasitas jalan( ) berhenti( ) << extends >> << extends >> class SepedaMotor mesin kapasitas jalan( ) berhenti( ) gantiOli( ) standard class Mobil mesin kapasitas jalan( ) berhenti( ) injakRem( )
Class SepedaMotor dan Mobil merupakan sub-class dari Kendaraan Class SepedaMotor dan Mobil mewarisi class member dari Kendaraan Namun class SepedaMotor dan Mobil tidak identik karena masing-masing memiliki perbedaan bentuk SepedaMotor memiliki tambahan member, yaitu standard dan gantiOli() sedangkan Mobil memiliki tambahan member yaitu injakRem()