• Tidak ada hasil yang ditemukan

Tutorial Inheritance

N/A
N/A
Protected

Academic year: 2021

Membagikan "Tutorial Inheritance"

Copied!
10
0
0

Teks penuh

(1)

Tutorial Inheritance

1. Terminologi Inheritance

Inheritance adalah fakta bahwa satu class dapat diturunkan sebagian atau seluruh

strukturnya dari class lainnya. Class yang melakukan penurunan disebut subclass atau

childclass dari class yang menurunkan yang disebut superclass atau parent class. Jika B

merupakan subclass dari A, maka A disebut superclass atau base class dan B di sebut

subclass atau class turunan. Perhatikan gambar berikut :

Untuk membuat class bernama B sebagai subclass dari base class A, caranya :

class B extends A {

.

. // tambahan atau modifikasi,

. // turunan dari class A

.

}

2. Aksesibilitas

Dalam subclass kita dapat megakses method public superclass dan protected serta fields , tapi bukan

method private dari superclass. Jika subclass dan superclass dalam package yang sama, kita juga

dapat mengakses method dan field default superclass. Perhatikan contoh berikut :

public class P {

public void publicMethod() { }

protected void protectedMethod() { }

void defaultMethod() { }

}

class C extends P {

public void testMethod() { publicMethod();

protectedMethod(); defaultMethod(); }

(2)

3. Method Overriding

a) Saat kita meng-extends suatu class, kita dapat merubah behavior dari method dalam

parent class maka kita melakukan method overriding.

b) Hal ini terjadi saat kita menulis method dalam yang mempunyai nama atau pengenal

yang sama dengan method pada parent class.

c) Jika hanya namanya yang sama tetapi daftar argument parameternya tidak maka kita

melakukan suatu method overloading.

4. Keyword extends

Jika kita akan meng-exend / meperluas / menurunkan suatu class gunakan keyword extends,

misal terdapat class Parent.java dan akan membuat turunanya yang di beri nama Child.java,

perhatikan contoh berikut :

public class Parent { }

public class Child extends Parent { }

5. Class Turunan

Untuk memahami atau membuat class turunan perhatikan contoh berikut :

class Animal {

public Animal(String aType) { type = aType;

}

public String toString() { return "This is a " + type; }

private String type; }

class Dog extends Animal { public Dog(String name){ super(name);

}

private String breed; }

6. Keyword super, sebagai instan atau superclass clangsung dari object saat ini

1. Kita dapat secara explicit memanggil konstruktor parent class dari konstruktor

subclass dengan menggunakan keyword super.

2. 'super' harus menjadi statement pertama dalam konstruktor, perhatikan contoh berikut

class Parent {

public Parent(){

} }

public class Child extends Parent { public Child () {

super(); }

(3)

7. Konstruktor class turunan : Pemanggilan konctruktor base class

Perhatikan contoh berikut,

class Animal {

public Animal(String aType) { type = new String(aType); }

public String toString() { return "This is a " + type; }

private String type; }

class Dog extends Animal { public Dog(String aName) { super("Dog");

name = aName; breed = "Unknown"; }

public Dog(String aName, String aBreed) { super("Dog");

name = aName; breed = aBreed; }

private String name; private String breed; }

8. Overriding method base class

Kita dapatmelakukan overriding method pada base class seperti contoh berikut

class Animal {

public Animal(String aType) { type = new String(aType); }

public String toString() { return "This is a " + type; }

private String type; }

class Dog extends Animal { public Dog(String aName) { super("Dog");

name = aName; breed = "Unknown"; }

public Dog(String aName, String aBreed) { super("Dog");

name = aName; breed = aBreed; }

public String toString() {

return "It's " + name + " the " + breed; }

private String name; private String breed; }

(4)

9. Type Casting

Type casting adalah suatu konversi tipe atau object ke tipe atau object lainnya,

a) Dengan objects, kita dapat melaukan cast pada suatu instance subclass ke parent

class.

b) Casting pada suatu bject ke parent class di sebut upcasting misalnya,

Child child = new Child ();

Parent parent = child;

Untuk melakukan upcasting yang kita perlukan adalah melakukan assignment pada object

yang di acu ke suatu referensi variabel dari tipe parent-nya. Variabel referensi Parent tidak

dapat diakses anggota yang hanya tersedia di child class. Karena referensi parent suatu object

bertipe child, kita dapat melakukan casting kembali ke child, ini dinamakan downcasting,

karena kita melakukan cast dari object ke class secara menurun dari hirarki inheritance.

Child child2 = (Child) parent;

10. Inheritance, constructor dan argument

Untuk memahami hal di atas perhatikan contoh berikut,

class A {

A(int i) {

System.out.println("A constructor"); } } class B extends A { B(int i) { super(i); System.out.println("B constructor"); } } class C extends B { C() { super(11); System.out.println("C constructor"); } }

public class MainClass {

public static void main(String[] args) { C x = new C();

} }

akan menghasilkan output

A constructor

B constructor C constructor

11. Inheritance dan Upcasting

Perhatikan contoh berikut untuk memahami persoalan inheritance dan upcasting

class A {

public void play() { }

(5)

} }

class B extends A { }

public class MainClass {

public static void main(String[] args) { B flute = new B();

A.tune(flute); // Upcasting }

}

12. Overloading nama method base class dalam class turunan dalam versi base class

yang tidak tersembunyi

Perhatikan contoh berikut

class A {

char doh(char c) {

System.out.println("doh(char)"); return 'd';

}

float doh(float f) {

System.out.println("doh(float)"); return 1.0f; } } class B {} class C extends A { void doh(B m) { System.out.println("doh(B)"); } }

public class MainClass {

public static void main(String[] args) { C b = new C(); b.doh(1); b.doh('x'); b.doh(1.0f); b.doh(new B()); } }

Output program sebagai berikut

doh(float)

doh(char) doh(float) doh(B)

(6)

13. Membersihkan Inheritance

Membersihkan inheritance dapat di pahami dari contoh berikut

class Characteristic {

private String s;

Characteristic(String s) { this.s = s;

System.out.println("Creating Characteristic " + s); }

protected void dispose() {

System.out.println("finalizing Characteristic " + s); } } class Description { private String s; Description(String s) { this.s = s;

System.out.println("Creating Description " + s); }

protected void dispose() {

System.out.println("finalizing Description " + s); }

}

class LivingCreature {

private Characteristic p = new Characteristic("is alive");

private Description t = new Description("Basic Living Creature"); LivingCreature() {

System.out.println("LivingCreature()"); }

protected void dispose() {

System.out.println("LivingCreature dispose"); t.dispose();

p.dispose(); }

}

class Animal extends LivingCreature {

private Characteristic p = new Characteristic("has heart"); private Description t = new Description("Animal not Vegetable"); Animal() {

System.out.println("Animal()"); }

protected void dispose() {

System.out.println("Animal dispose"); t.dispose();

p.dispose(); super.dispose(); }

(7)

class Amphibian extends Animal {

private Characteristic p = new Characteristic("can live in water"); private Description t = new Description("Both water and land"); Amphibian() {

System.out.println("Amphibian()"); }

protected void dispose() {

System.out.println("Amphibian dispose"); t.dispose();

p.dispose(); super.dispose(); }

}

class Frog extends Amphibian {

private Characteristic p = new Characteristic("Croaks"); private Description t = new Description("Eats Bugs"); public Frog() {

System.out.println("Frog()"); }

protected void dispose() {

System.out.println("Frog dispose"); t.dispose();

p.dispose(); super.dispose(); }

}

public class MainClass {

public static void main(String[] args) { Frog frog = new Frog();

System.out.println("Bye!"); frog.dispose();

} }

Output program adalah sebagai berikut :

Creating Characteristic is alive

Creating Description Basic Living Creature LivingCreature()

Creating Characteristic has heart

Creating Description Animal not Vegetable Animal()

Creating Characteristic can live in water Creating Description Both water and land Amphibian()

Creating Characteristic Croaks Creating Description Eats Bugs Frog()

Bye!

Frog dispose

finalizing Description Eats Bugs finalizing Characteristic Croaks Amphibian dispose

(8)

finalizing Description Both water and land finalizing Characteristic can live in water Animal dispose

finalizing Description Animal not Vegetable finalizing Characteristic has heart

LivingCreature dispose

finalizing Description Basic Living Creature finalizing Characteristic is alive

14. Multilevel Hirarki

Perhatikan contoh membuat multilevel hirarki class

class Box {

private double width; private double height; private double depth;

Box(Box ob) { // pass object to constructor width = ob.width;

height = ob.height; depth = ob.depth; }

Box(double w, double h, double d) { width = w;

height = h; depth = d; }

Box() {

width = -1; // use -1 to indicate height = -1; // an uninitialized depth = -1; // box

}

Box(double len) {

width = height = depth = len; }

double volume() {

return width * height * depth; }

}

class BoxWeight extends Box { double weight; // weight of box

BoxWeight(BoxWeight ob) { // pass object to constructor super(ob);

weight = ob.weight; }

BoxWeight(double w, double h, double d, double m) { super(w, h, d); // call superclass constructor weight = m;

}

(9)

weight = -1; }

BoxWeight(double len, double m) { super(len);

weight = m; }

}

class Shipment extends BoxWeight { double cost;

Shipment(Shipment ob) { // pass object to constructor super(ob);

cost = ob.cost; }

Shipment(double w, double h, double d, double m, double c) { super(w, h, d, m); // call superclass constructor

cost = c; } Shipment() { super(); cost = -1; }

Shipment(double len, double m, double c) { super(len, m);

cost = c; }

}

class DemoShipment {

public static void main(String args[]) {

Shipment shipment1 = new Shipment(10, 20, 15, 10, 3.41); Shipment shipment2 = new Shipment(2, 3, 4, 0.76, 1.28); double vol;

vol = shipment1.volume();

System.out.println("Volume of shipment1 is " + vol);

System.out.println("Weight of shipment1 is " + shipment1.weight); System.out.println("Shipping cost: $" + shipment1.cost);

System.out.println(); vol = shipment2.volume();

System.out.println("Volume of shipment2 is " + vol);

System.out.println("Weight of shipment2 is " + shipment2.weight); System.out.println("Shipping cost: $" + shipment2.cost);

} }

15. Demonstrasi saat konstruktor di panggil dalam multilevel hirarki

Perhatikan contoh demonstrasinya di bawah ini

class A {

A() {

System.out.println("Inside A's constructor."); }

(10)

class B extends A { B() {

System.out.println("Inside B's constructor."); }

}

class C extends B { C() {

System.out.println("Inside C's constructor."); }

}

class CallingCons {

public static void main(String args[]) { C c = new C();

} }

Referensi

Dokumen terkait

Untuk itu, pada tahun 2018 ini Direktorat Jenderal Anak Usia Dini dan Pendidikan Masyarakat melalui Direktorat Pembinaan Kursus dan Pelatihan menyelenggarakan program

Hanya 1 Kota dari 26 Kabupaten/Kota di Provinsi Jawa Barat yang dapat mencapai target tersebut pada tahun 2013... CAKUPAN PERSALINAN DITOLONG TENAGA KESEHATAN DI INDONESIA

Metode Credit Metrics menggunakan data rating dan matriks transisi yang diterbitkan oleh perusahaan pemeringkat dapat diaplikasikan bersama simulasi Monte Carlo

Volume penjualan adalah total penjualan yang dinilai dengan unit dalam periode tertentu untuk mencapai laba yang maksimal sehingga dapat menunjang pertumbuhan

Karena Level Gauge merupakan kelengkapan (accessories) tangki storage chemical injection , maka untuk merancang level gauge harus mengikuti design dari tangki storage

Dengan melihat kondisi di atas maka dianggap perlu adanya suatu wadah pemerintahan untuk mengkoordinasi pemer intahan terhadap wilayah kecamatan, maka dibentuklah suatu

Salah satu rekomendasi dari studi Masterplan Pengembangan Wilayah Sungai Walanae Cenranae, adalah pemanfaatan tampungan yang ada pada Danau Tempe untuk mengairi