INHERITANCE (Oleh : Nur Hayatin, S.ST) Pemrograman Object Oriented dengan JAVA Teknik Informatika-UMM
Topik Inheritance Implementasi Other class modifier Method override Constructor pada inheritance Keyword this & super
Fitur OOP Encapsulation Polymorphism Inheritance
Inheritance Parent/induk : class yang memiliki member class Sebuah class dapat melakukan penurunan. Penurunan class berhubungan dengan member class (attribut dan method). Parent/induk : class yang memiliki member class Child/anak : class yang mewarisi member class dari parent. Parent Child
Pernyataan : Class B merupakan turunan dari class A Maka class B memiliki semua member dari class A. Class C merupakan turunan dari class B Maka class C memiliki semua member dari class B dan class A.
Hirarki Object Superclass Java.lang.Object implisit A B C D Superclass class yang letaknya di atas class tertentu di dalam hierarki. Subclass class yang letaknya di bawah class tertentu di dalam hierarki.
Hirarki Direct superclass A B C D Undirect superclass
Hirarki Direct subclass A B C D Undirect subclass
Implementasi Menggunakan keyword extends. Ditulis ketika deklarasi class. Satu class hanya dapat memiliki satu parent (Single- inheritance). Syntax : Contoh : class Kucing extends Mamalia { } class namaclass extends namaclass_parent { }
Kapan kita menerapkan inheritance? Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain.
Misal terdapat class Pegawai public class Pegawai { public String nama; public double gaji; }
Misal terdapat class Manager public class Manajer { public String nama; public double gaji; public String departemen; }
Dari 2 buah class diatas, kita lihat class Manajer mempunyai data member yang identik sama dengan class Pegawai, hanya saja ada tambahan data member departemen. Sebenarnya yang terjadi disana adalah class Manajer merupakan perluasan dari class Pegawai dengan tambahan data member departemen. Disini perlu memakai konsep inheritance, sehingga class Manajer dapat kita tuliskan seperti berikut
public class Manajer extends Pegawai { public String departemen; }
Kesimpulan Subclass yang paling bawah memiliki member class lebih banyak, hasil turunan dari superclass-nya. Untuk melakukan inheritance antar class digunakan keyword extends. Subclass merupakan perluasan dari superclass-nya. Class tidak dapat memiliki lebih dari satu parent. Parent 1 Child Parent 2
Exercises (Inheritance) Animals Mamalia Reptilia Unggas Aves Insekta Keterangan : Package animals memiliki class Mamalia, Reptilia, Unggas, Aves dan Insekta. Tugas! Buatlah subclass dari tiap class (minimal 5 tingkatan subclass). Gambarkan hirarki-nya (seperti gambar 1) Buatlah kode program. Tiap superclass pada hirarki yg paling atas memiliki satu variabel bernama kaki. Cobalah akses variabel kaki tersebut pada tiap subclass. Lengkapi tabel 1 dengan memberikan tanda centang untuk hak akses class terhadap variabel kaki yang ada pada superclass.
Mamalia Subclass 1 Subclass 2 Gambar 1 Subclass 3 Tabel 1 Variabel kaki Mamalia Subclass1 Subclass2 Subclass3 Subccass4 Subclass5 Subclass 4 Subclass 5
Other Class Modifier Final Abstract
Final Class Jika sebuah class ber-modifier final berarti class tersebut tidak dapat diturunkan. final class Macan { } class Singa extends Macan { } Syntax error!! Cannot inherit from final Macan
Abstract Class Class yang didalamnya terdapat minimal satu method bertipe abstract maka class tersebut wajib dideklarasikan sebagai class abstract. Class abstract tidak dapat di-instansiasi. Class abstract harus diturunkan. Karena method abstract yang dimilikinya baru dapat diimplementasi dari class anak- nya. Syarat extends terhadap abstract class : semua method abstract yang ada harus diimplementasikan/dideklarasi ulang didalam class anak.
Contoh : Abstract class public abstract class Kucing{ public static void main(String[] args){ Kucing k = new Kucing(); } abstract void getKaki(); Syntax error!! Kucing is abstract cannot be instantiate
Instansiasi Object dari Abstract class public abstract class Kucing{ public static void main(String[] args){ } abstract void getKaki(); public class Anjing extends Kucing{ public static void main(String[] args){ Anjing k = new Anjing(); } void getKaki() {
Method Override Sebuah method yang dideklarasikan dalam superclass dapat dideklarasi ulang dalam subclass. Deklarasi ulang method superclass pada subclass inilah yang disebut dengan method override. Override merupakan salah satu bentuk polymorfisme dalam konsep OOP. Syarat override : deklarasi method harus sama persis. Namun content/body method dapat berbeda.
Contoh Implementasi public class Animal { public void SetVoice() { System.out.println(“Blesepblesep”); } public class Dog extends Animal { public void SetVoice() { System.out.println(“Hug hug”);
Constructor pada inheritance Misalkan kita buat class parent bernama Person sbb : public class Person { protected String name; protected String address; public Person(){ System.out.println(“Inside Person:Constructor”); }
Constructor pada inheritance Sekarang, kita buat class lain bernama Student yang meng-extends class Person. public class Student extends Person { public Student(){ System.out.println(“Inside Student:Constructor”); }
Alur Eksekusi Constructor Ketika sebuah object Student diinstansiasi, default constructor dari superclass Student dipanggil secara implisit untuk melakukan inisialisasi seperlunya. Setelah itu, pernyataan di dalam constructor subclass baru dijalankan.
Penjelasan Untuk memperjelasnya, perhatikan kode dibawah ini, Dalam kode ini, kita membuat sebuah object dari class Student. Hasil dari program adalah: public static void main( String[] args ){ Student anna = new Student(); } Inside Person:Constructor Inside Student:Constructor
Diagram Alur Eksekusi Constructor
Keyword “this” dan “super” Selain menggunakan variabel reference, variabel dan method yang ada pada class dapat diakses dengan menggunakan keyword this atau super. “this” digunakan untuk me-refer member class yang ada pada class itu sendiri. “super” digunakan untuk me-refer member class pada superclass. “this” dan “super” tidak dapat digunakan pada method bertipe static.
Format “this” Format penulisannya adalah sebagai berikut : this.attribut merujuk pada variabel/attribut class itu sendiri this.method() merujuk pada method atau fungsi class itu sendiri this() merujuk pada constructor class itu sendiri
Format “super” Format penulisannya adalah sebagai berikut : super.attribut merujuk pada variabel/attribut dari superclass super.method() merujuk pada method atau fungsi dari superclass super() merujuk pada constructor dari superclass
“this” pada Attribut Format : this.attribut. Merujuk pada variabel/attribut yang dimiliki class itu sendiri.
Contoh “this” pada Attribut Berapa nilai variabel area?? Output : 6 class Point{ int x=2,y=3; void getArea() { int area = this.x*this.y; System.out.println(area); }
Contoh implementasi “this” Kadangkala, dalam sebuah class perlu dibedakan anggota (baik field maupun method) dari object-object tertentu. getArea(4,5) Output : 6 class Point{ int x=2,y=3; void getArea(int x,int y) { int area = this.x*this.y; System.out.println(area); } Akses instance variabel menggunakan this
“super” pada Attribut Format : super.attribut. Merujuk pada variabel/attribut dari superclass.
“super” pada Attribut Berapa nilai variabel area?? Output : 6 class Shape extends Point{ int x=4,y=5; int getArea() { int area = super.x*super.y; return area; }
Berapa nilai variabel area? Latihan Berapa nilai variabel area? class Point{ int x=2,y=3; void getArea(int x,int y) { int area = (x-this.x)*(y-this.y); System.out.println(area); } getArea(4,5) Output : 4
Latihan class 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);
Hasil Nilai x sebagai parameter = 20 Data member x di class Child = 10 Data member x di class Parent = 5
“this” pada Method Merujuk pada method atau fungsi yang dimiliki class itu sendiri. Format : this.method()
Contoh “this” pada Method Berapa nilai variabel area?? Output : 25 Class Point2{ int x=5; int getX() { return x; } int getArea() { int area = 5*this.getX(); return area;
“super” pada Method Merujuk pada method atau fungsi dari superclass. Format : super.method()
Contoh “super” pada Method Berapa nilai variabel area?? Output : 10 class Shape extends Point2{ int x=2; int getArea() { int area = this.x*super.getX(); return area; }
“this” & “super” pada Constructor “this” dan “super” dapat digunakan untuk memanggil construcor. Syaratnya : 1) Pemanggilan this atau super harus dilakukan didalam constructor. 2) statement this atau super tersebut harus diletakkan pada baris pertama.
Keyword “this” (pada constructor) class Point{ int x=2,y=3; Point(){ this(1); } Point(int x){ this.x = x; int getArea() { int area = this.x*this.y; return area; public static void main(String[] args) { Point p = new Point(); System.out.print(" " + p.getArea()); } Output : 3
Keyword “super” (pada constructor) class Shape extends Point{ int x=4,y=5; int getArea() { int area = super.x*super.y; return area; } Shape() { super(); int z; public static void main(String[] args) { Shape s = new Shape(); System.out.print(" " + s.getArea()); } Output : 3