PEMROGRAMAN LANJUT Sistem Informasi FILKOM UB Semester Genap 2016/2017 KONSEP OOP: PEWARISAN / INHERITANCE Dr. Eng. Herman Tolle Fakultas 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, Namunsetiapanakdapat memiliki sifat yang berbeda dan tidak dimiliki oleh ayah maupun saudara-saudaranya Suatu class dapat mewariskan class member (atribut dan method) kepada class lain, konsep tersebut dikenal dengan istilah inheritance
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 diaksesoleh class-class dalam package yang sama Class member yang memiliki modifier private hanya dapat diakses dari dalam class tersebut saja
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
//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; //
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 lebihspesifik dansesuai dengansub-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, SUPER & KONSTRUKTOR
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!
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 Gunakan kata kunci Super utk memanggil konstruktor dan fungsi yang ada di di kelas induk
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();
Konstruktor dalam Inheritance Subclass mewarisi semua member (fields, methods, dan nested classes) dari superclass-nya. Konstruktor tidak termasuk member class, jadi konstruktor tidak diturunkan ke subclass, Tetapi, konstruktor dari superclass dapat dipanggil dari subclass dengan kata kunci super. Konstruktor superclass Otomatis dipanggil sebelum kode pada konstruktor subclass dijalankan
CAUTION You must use the keyword super to call the superclass constructor. Invoking a superclass constructor s name in a subclass causes a syntax error. Java requires that the statement that uses the keyword super appear first in the constructor. 33
Constructor Chaining Constructing an instance of a class invokes all the superclasses constructors along the inheritance chain. This is known as constructor chaining. public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 34
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 1. Start from the main method public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 35
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); 2. Invoke Faculty constructor public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 36
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); 3. Invoke Employee s noarg constructor class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 37
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); 4. Invoke Employee(String) constructor class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 38
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); 5. Invoke Person() constructor class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 39
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); 6. Execute println class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 40
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); 7. Execute println class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 41
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); 8. Execute println class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 42
animation Trace Execution public class Faculty extends Employee { public static void main(string[] args) { new Faculty(); public Faculty() { System.out.println("(4) Faculty's no-arg constructor is invoked"); 9. Execute println class Employee extends Person { public Employee() { this("(2) Invoke Employee s overloaded constructor"); System.out.println("(3) Employee's no-arg constructor is invoked"); public Employee(String s) { System.out.println(s); class Person { public Person() { System.out.println("(1) Person's no-arg constructor is invoked"); 43
FINAL CLASS, FINAL METHOD
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() {...
Contoh Final Method class ChessAlgorithm { enum ChessPlayer { WHITE, BLACK... final ChessPlayer getfirstplayer() { return ChessPlayer.WHITE;...
Final Variabel Variabel Final adalah variabel yang hanya dapat diinisialisasi satu kali saja. Contoh deklarasi: public final double nilaieuler;
Relasi Antar Kelas Suatu class dapat dibangun dari ataupun memiliki keterkaitan dengan kelas yang lain Secara umum relasi antar class adalah: Depedensi ( uses-a ); (relasi menggunakan) Agregasi ( has-a ); (relasi mempunyai ) Inheritance ( is-a ); (relasi adalah)
IS-A IS-A is a way of saying : This object is a type of that object. public class Animal { public class Mammal extends Animal{ public class Reptile extends Animal{ public class Dog extends Mammal{ Now, if we consider the IS-A relationship, we can say Mammal IS-A Animal Reptile IS-A Animal Dog IS-A Mammal Hence : Dog IS-A Animal as well
Overriding vs. Overloading public class Test { public static void main(string[] args) { A a = new A(); a.p(10); a.p(10.0); class B { public void p(double i) { System.out.println(i * 2); class A extends B { // This method overrides the method in B public void p(double i) { System.out.println(i); public class Test { public static void main(string[] args) { A a = new A(); a.p(10); a.p(10.0); class B { public void p(double i) { System.out.println(i * 2 ); class A extends B { // This method overloads the method in B public void p(int i) { System.out.println(i); 51
The Object Class and Its Methods Every class in Java is descended from the java.lang.object class. If no inheritance is specified when a class is defined, the superclass of the class is Object. public class Circle {... Equivalent public class Circle extends Object {... 52