• Tidak ada hasil yang ditemukan

KONSEP OOP: PEWARISAN / INHERITANCE

N/A
N/A
Protected

Academic year: 2021

Membagikan "KONSEP OOP: PEWARISAN / INHERITANCE"

Copied!
52
0
0

Teks penuh

(1)

PEMROGRAMAN LANJUT

Fakultas Ilmu Komputer, Universitas Brawijaya

KONSEP OOP:

PEWARISAN / INHERITANCE

Dr. Eng. Herman Tolle

Sistem Informasi FILKOM UB

Semester Genap 2016/2017

(2)

Outline Keyword

• Inheritance

• Superclass

• Subclass

• Extends

• Reusability

• Override

• This & super

(3)

Inheritance (Pewarisan)

• Pewarisan suatu class pada class lainnya

• Seorang ayah dapat mewariskan beberapa sifat yang

sama pada anak-anaknya, Namun setiap anak dapat

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

(4)

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

(5)

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

(6)

Ilustrasi Inheritance

subClass

superClass

<< extends >>

• 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)

(7)

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;

}

(8)

• 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.

class Kendaraan

mesin

kapasitas

jalan( )

berhenti( )

<< extends >>

class Mobil

mesin

kapasitas

jalan( )

berhenti( )

(9)

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

(10)

Semua Class adalah turunan Kelas Object

• Dalam Java, semua class, termasuk class yang membangun

Java API, adalah subclassesdari superclass Object.

(11)

Tipe Inheritans

• Catatan: java hanya mengenal single superclass tidak ada

multiple superclass

(12)

LATIHAN

• Buat contoh kelas induk dan kelas turunan:

– Person à Student

(13)

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

(14)

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 diakses oleh

class-class dalam package yang sama

• Class member yang memiliki modifier

private

hanya dapat

diakses dari dalam class tersebut saja

(15)

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 >>

(16)

//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

}

}

(17)

//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; //

}

}

(18)

//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; //

}

}

(19)

//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; //

}

}

(20)

• 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

(21)

OVERLOADING METHOD

IN INHERITANCE

(22)

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 lebih spesifik dan sesuai dengan sub-class yang dirancang

(23)

// 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");

}

(24)

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)

(25)
(26)

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:

(27)

Contoh this & super

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

//

Tuliskan output dari perintah ini!

}

}

(28)

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

(29)

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;

}

(30)

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

(31)

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

}

}

(32)

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

(33)

33

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

(34)

34

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"); }

}

Constructing an instance of a class invokes all the superclasses’ constructors

along the inheritance chain. This is known as constructor chaining.

(35)

35

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

1. Start from the

main method

(36)

36

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

2. Invoke Faculty

constructor

(37)

37

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

3. Invoke Employee’s

no-arg constructor

(38)

38

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

4. Invoke Employee(String)

constructor

(39)

39

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

5. Invoke Person() constructor

(40)

40

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

6. Execute println

(41)

41

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

7. Execute println

(42)

42

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

8. Execute println

(43)

43

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); } } class Person { public Person() {

System.out.println("(1) Person's no-arg constructor is invoked"); }

}

9. Execute println

(44)
(45)

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

(46)

Final Method

• Method yang tidak dapat di override oleh

sub class

Contoh deklarasi:

public final void contohFinalMethod()

{...}

(47)

Contoh Final Method

class ChessAlgorithm {

enum ChessPlayer { WHITE, BLACK }

...

final ChessPlayer getFirstPlayer() {

return ChessPlayer.WHITE;

}

...

}

(48)

Final Variabel

• Variabel Final adalah variabel yang hanya

dapat diinisialisasi satu kali saja.

Contoh deklarasi:

(49)

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 )

(50)

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

(51)

51

Overriding vs. Overloading

public class Test {

publ ic stat ic void main( String[ ] args) {

A a = new A(); a. p(10); a. p(10.0) ; } } class B {

publ ic void p(doub le i) {

Sy stem.ou t.print ln(i * 2);

} }

class A exten ds B {

// T his met hod ove rrides the me thod in B

publ ic void p(doub le i) { Sy stem.ou t.print ln(i); }

}

public class T est {

publi c stati c void main(St ring[] args) { A a = new A(); a.p (10); a.p (10.0); } } class B {

publi c void p(doubl e i) {

Sys tem.out .printl n(i * 2);

} }

class A extend s B {

// Th is meth od over loads t he meth od in B

publi c void p(int i ) { Sys tem.out .printl n(i); }

}

(52)

52

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 {

...

}

Gambar

Ilustrasi kode program  package prog class Saja class Coba varAvarBvarCvarD objek akses varA varB varC class Lagi objek baca varAclass Turunanobjek sifatvarAvarB&lt;&lt; extends &gt;&gt;&lt;&lt; import &gt;&gt;

Referensi

Dokumen terkait

yang dapat dilakukan oleh guru adalah menjadi seseorang guru yang profesional. Bekerja keras untuk memenangkan rasa

Di dalam Sistem Internasional (SI) terdapat 7 besaran pokok yang memiliki dimensi yaitu panjang, suhu, waktu, arus listrik, massa intensitas cahaya dan jumlah zat, dan 2

Indikator pertama adalah motif Aggressiveness (sifat agresif) yang terbagi atas 5 pernyataan akan tetapi yang dibahas hanya 4 pernyataan karena 1 pernyataan yang lain tidak valid

produk atau jasa per setiap masukan (input) sumber daya yang digunakan dalam suatu proses produksi. • Produktivitas dapat dinyatakan

menjelaskan bahwa perlakuan dengan kombinasi dosis pupuk 0, 7 kg kompos ampas sagu + 35 g NPK (E) menunjukkan rata-rata jumah daun terbaik yaitu sebanyak

Selanjutnya, itu akan terjadi digunakan dua jenis teknik analisis (a) analisis faktor, digunakan untuk mengkonfirmasi faktor yang paling dominan variabel dalam satu kelompok dan

Menentukan kondisi operasi yang optimal (daya microwave , lama waktu ekstraksi, dan rasio antara bahan baku yang akan diekstrak dengan pelarut yang digunakan) dari

Tidak adanya kebijakan perusahaan terkait penggunaan internet di tempat kerja dengan kombinasi kebijakan lain (membawa perangkat keras pribadi dan cara kerja baru) yang ada