• Tidak ada hasil yang ditemukan

Bab 11 - Pewarisan, Polimorfisme, dan Interface

N/A
N/A
Protected

Academic year: 2017

Membagikan "Bab 11 - Pewarisan, Polimorfisme, dan Interface"

Copied!
16
0
0

Teks penuh

(1)

Pengenalan Pem rogram an 1 1

BAB 1 1

Pe w a r isa n, Polim or fism e , da n I nt e r fa ce

1 1 .1 Tu j u a n

Dalam bagian ini, kit a akan m em bicarakan bagaim ana suat u class dapat m ewariskan sifat dari class yang sudah ada. Class ini dinam akan subclass dan induk class dinam akan

superclass. Kit a j uga akan m em bicarakan sifat khusus dari Java dim ana kit a dapat secara ot om at is m em akai m et hod yand t epat unt uk set iap obj ect t anpa m em perhat ikan asal dari subclass obj ect . Sifat ini dinam akan polim orfism e. Pada akhirnya, kit a akan m endiskusikan t ent ang int erface yang m em bant u m engurangi penulisan program .

Pada akhir pem bahasan, diharapkan pem baca dapat :

 Mendefinisikan superclasses dan subclasses

Override m et hod dari superclasses

 Mem buat m et hod final dan class final

1 1 .2 Pew a r isa n

Dalam Java, sem ua class, t erm asuk class yang m em bangun Java API , adalah subclasses dari superclass Obj ect . Cont oh hirarki class diperlihat kan di bawah ini.

Beberapa class di at as class ut am a dalam hirarki class dikenal sebagai superclass. Sem ent ara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class t ersebut .

Pewarisan adalah keunt ungan besar dalam pem rogram an berbasis obj ect karena suat u sifat at au m et hod didefinisikan dalam superclass, sifat ini secara ot om at is diwariskan dari sem ua subclasses. Jadi, Anda dapat m enuliskan kode m et hod hanya sekali dan m ereka dapat digunakan oleh sem ua subclass. Subclass hanya perlu m engim plem ent asikan

(2)

Pengenalan Pem rogram an 1 2 perbedaannya sendiri dan induknya.

1 1 .2 .1 M e n de fin isik a n Su pe r cla ss da n Su bcla ss

Unt uk m em peroleh suat u class, kit a m enggunakan kat a kunci e x t e n d. Unt uk m engilust rasikan ini, kit a akan m em buat cont oh class induk. Dim isalkan kit a m em punyai class induk yang dinam akan Person.

public class Person

* Constructor dengan dua parameter */

public Person( String name, String address ){ this.name = name;

public void setName( String name ){ this.name = name;

}

public void setAddress( String add ){ this.address = add;

(3)

Pengenalan Pem rogram an 1 3 Perhat ikan bahwa at ribut nam e dan address dideklarasikan sebagai pr ote ct e d. Alasannya kit a m elakukan ini yait u, kit a inginkan at ribut - at ribut ini unt uk bisa diakses oleh subclasses dari superclassess. Jika kit a m endeklarasikannya sebagai privat e, subclasses t idak dapat m enggunakannya. Cat at an bahwa sem ua propert i dari superclass yang dideklarasikan sebagai pu blic, pr ot ect e d da n de fa u lt dapat diakses oleh subclasses-nya.

Sekarang, kit a ingin m em buat class lain bernam a St udent . Karena St udent juga sebagai Person, kit a put uskan hanya m eng-ext end class Person, sehingga kit a dapat m ewariskan sem ua propert i dan m et hod dari set iap class Person yang ada. Unt uk m elakukan ini, kit a t ulis,

public class Student extends Person {

public Student(){

System.out.println(“Inside Student:Constructor”); //beberapa kode di sini

}

// beberapa kode di sini }

Ket ika obj ect St udent di-inst ant iat e, default const ruct or dari superclass secara m ut lak m em int a unt uk m elakukan inisialisasi yang seharusnya. Set elah it u, pernyat aan di dalam subclass dieksekusi. Unt uk m engilust rasikannya, perhat ikan kode berikut ,

public static void main( String[] args ){ Student anna = new Student();

}

Dalam kode ini, kit a m em buat sebuah obj ect dari class St udent . Keluaran dari program adalah,

Inside Person:Constructor Inside Student:Constructor

(4)

Pengenalan Pem rogram an 1 4

1 1 .2 .2 Ka t a Ku n ci Su pe r

Subclass j uga dapat m em anggil const ruct or secara eksplisit dari superclass t erdekat . Hal ini dilakukan dengan pem anggil const rukt or supe r. Pem anggil const ruct or super dalam const ruct or dari subclass akan m enghasilkan eksekusi dari superclass const ruct or yang bersangkut an, berdasar dari argum en sebelum nya.

Sebagai cont oh, pada cont oh class sebelum nya. Person dan St udent , kit a t unj ukkan cont oh dari pem anggil const ruct or super. Diberikan kode berikut unt uk St udent ,

public Student(){

super( "SomeName", "SomeAddress" );

System.out.println("Inside Student:Constructor"); }

Kode ini m em anggil const ruct or kedua dari superclass t erdekat ( yait u Person) dan m engeksekusinya. Cont oh kode lain dit unj ukkan sebagai berikut ,

public Student(){ super();

System.out.println("Inside Student:Constructor");

(5)

Pengenalan Pem rogram an 1 5 }

Kode ini m em anggil default const ruct or dari superclass t erdekat (yait u Person) dan m engeksekusinya.

Ada beberapa hal yang harus diingat ket ika m enggunakan pem anggil const ukt or super:

1. Pem anggil super( ) HARUS DI JADI KAN PERNYATAAN PERTAMA DALAM const ruct or. 2. Pem anggil super( ) hanya dapat digunakan dalam definisi const ruct or.

3. Term asuk const ruct or t his( ) dan pem anggil super() TI DAK BOLEH TERJADI DALAM overriding digunakan. Subclass dapat m engesam pingkan m et hod yang didefinisikan dalam

superclass dengan m enyediakan im plem ent asi baru dari m et hod t ersebut .

(6)

Pengenalan Pem rogram an 1 6 return name;

} : }

Jadi, ket ika kit a m em int a m et hod get Nam e dari obj ect class St udent , m et hod overridde akan dipanggil, keluarannya akan m enj adi,

Student: getName

1 1 .2 .4 M e t h od fin a l da n cla ss fin a l

Dalam Java, j uga m em ungkinkan unt uk m endeklarasikan class- class yang t idak lam a m enj adi subclass. Class ini dinam akan cla ss fin a l. Unt uk m endeklarasikan class unt uk m enj adi final kit a hanya m enam bahkan kat a kunci fina l dalam deklarasi class. Sebagai cont oh, j ika kit a ingin class Person unt uk dideklarasikan final, kit a t ulis,

public final class Person {

//area kode }

Beberapa class dalam Java API dideklarasikan secara final unt uk m em ast ikan sifat nya t idak dapat di-override. Cont oh- cont oh dari class ini adalah I nt eger, Double, dan St ring.

I ni m em ungkinkan dalam Java m em buat m et hod yang t idak dapat di-override. Met hod ini dapat kit a panggil m e th od fin a l. Unt uk m endeklarasikan m et hod unt uk m enj adi final, kit a t am bahkan kat a kunci final ke dalam deklarasi m et hod. Cont ohnya, j ika kit a ingin m et hod get Nam e dalam class Person unt uk dideklarasikan final, kit a t ulis,

public final String getName(){ return name;

}

(7)

Pengenalan Pem rogram an 1 7

1 1 .3 Polim or fism e

Sekarang, class induk Person dan subclass St udent dari cont oh sebelum nya, kit a t am bahkan subclass lain dari Person yait u Em ployee. Di bawah ini adalah hierarkinya,

Per son

St udent Em ploy ee

Dalam Java, kit a dapat m em buat referensi yang m erupakan t ipe dari superclass ke sebuah obj ect dari subclass t ersebut . Sebagai cont ohnya,

public static main( String[] args ) {

Person ref;

Student studentObject = new Student(); Employee employeeObject = new Employee();

ref = studentObject; //Person menunjuk kepada // object Student

//beberapa kode di sini }

Sekarang dim isalkan kit a punya m et hod get Nam e dalam superclass Person kit a, dan kit a override m et hod ini dalam kedua subclasses St udent dan Em ployee,

public class Person {

public String getName(){

System.out.println(“Person Name:” + name); return name;

} }

public class Student extends Person {

public String getName(){

System.out.println(“Student Name:” + name); return name;

} }

(8)

Pengenalan Pem rogram an 1 8 kit a berikan ref ke obj ect Em ployee, m et hod get Nam e dari Em ployee akan dipanggil.

public static main( String[] args ) {

Person ref;

Student studentObject = new Student(); Employee employeeObject = new Employee();

ref = studentObject; //Person menunjuk kepada // object Student

String temp = ref.getName(); //getName dari Student //class dipanggil System.out.println( temp );

ref = employeeObject; //Person menunjuk kepada // object Employee

String temp = ref.getName(); //getName dari Employee //class dipanggil

System.out.println( temp ); }

Kem am puan dari reference unt uk m engubah sifat m enurut obj ect apa yang dij adikan acuan dinam akan polim orfism e. Polim orfism e m enyediakan m ult iobj ect dari subclasses yang berbeda unt uk diperlakukan sebagai obj ect dari superclass t unggal, secara ot om at is m enunj uk m et hod yang t epat unt uk m enggunakannya ke part icular obj ect berdasar subclass yang t erm asuk di dalam nya.

Cont oh lain yang m enunj ukkan propert i polim orfism e adalah ket ika kit a m encoba m elalui reference ke m et hod. Misalkan kit a punya m et hod st at ic pr in t I n for m a t ion yang m engakibat kan obj ect Person sebagai reference, kit a dapat m e- reference dari t ipe Em ployee dan t ipe St udent ke m et hod ini selam a it u m asih subclass dari class Person.

public static main( String[] args ) {

Student studentObject = new Student(); Employee employeeObject = new Employee();

(9)

Pengenalan Pem rogram an 1 9 public static printInformation( Person p ){

. . . . }

1 1 .4 Abst r a ct Cla ss

Misalnya kit a ingin m em buat superclass yang m em punyai m et hod t ert ent u yang berisi im plem ent asi, dan j uga beberapa m et hod yang akan di- overridden oleh subclasses nya.

Sebagai cont oh, kit a akan m em buat superclass bernam a LivingThing. class ini m em punyai m et hod t ert ent u sepert i breat h, eat , sleep, dan walk. Akan t et api, ada beberapa m et hod di dalam superclass yang sifat nya t idak dapat digeneralisasi. Kit a am bil cont oh, m et hod walk.

Tidak sem ua kehidupan berj alan( walk) dalam cara yang sam a. Am bil m anusia sebagai m isal, kit a m anusia berj alan dengan dua kaki, dim ana kehidupan lainnya sepert i anjing berj alan dengan em pat kaki. Akan t et api, beberapa ciri um um dalam kehidupan sudah biasa, it ulah kenapa kit a inginkan m em buat superclass um um dalam hal ini.

Kit a dapat m em buat superclass yang m em punyai beberapa m et hod dengan im plem ent asi sedangkan yang lain t idak. Class j enis ini yang disebut dengan class abst ract .

Sebuah cla ss a bstr a ct adalah class yang t idak dapat di-inst ant iat e. Seringkali m uncul di at as hirarki class pem rogram an berbasis obj ect , dan m endefinisikan keseluruhan aksi yang m ungkin pada obj ect dari seluruh subclasses dalam class.

Met hod ini dalam class abst ract yang t idak m em punyai im plem ent asi dinam akan m et hod abst ract . Unt uk m em buat m et hod abst ract , t inggal m enulis deklarasi m et hod t anpa t ubuh class dan digunakan m enggunakan kat a kunci abst ract . Cont ohnya,

(10)

Pengenalan Pem rogram an 1 10

public class Human extends LivingThing {

(11)

Pengenalan Pem rogram an 1 11

1 1 .5 I n t e r fa ce

I n t e rfa ce adalah j enis khusus dari blok yang hanya berisi m et hod signat ure( at au const ant ) . I nt erface m endefinisikan sebuah(signat ure) dari sebuah kum pulan m et hod t anpa t ubuh.

I nt erface m endefinisikan sebuah cara st andar dan um um dalam m enet apkan sifat - sifat dari

(12)

Pengenalan Pem rogram an 1 12

1 1 .5 .2 I n t e r fa ce vs. Cla ss Abst r a ct

Berikut ini adalah perbedaan ut am a ant ara sebuah int erface dan sebuah class abst ract : m et hod int erface t idak punya t ubuh, sebuah int erface hanya dapat m endefinisikan konst ant a dan int erface t idak langsung m ewariskan hubungan dengan class ist im ewa lainnya, m ereka didefinisikan secara independent .

1 1 .5 .3 I n t e r fa ce vs. Cla ss

Sat u ciri um um dari sebuah int erface dan class adalah pada t ipe m ereka berdua. I ni art inya bahwa sebuah int erface dapat digunakan dalam t em pat -t em pat dim ana sebuah class dapat digunakan. Sebagai cont oh, diberikan class Person dan int erface PersonI nt erface, berikut deklarasi yang benar:

PersonInterface pi = new Person();

Person pc = new Person();

Bagaim anapun, Anda t idak dapat m em buat inst ance dari sebuah int erface. Cont ohnya:

PersonInterface pi = new PersonInterface(); //COMPILE //ERROR!!!

Ciri um um lain adalah baik int erface m aupun class dapat m endefinisikan m et hod. Bagaim anapun, sebuah int erface t idak punya sebuah kode im plem ent asi sedangkan class m em iliki salah sat unya.

1 1 .5 .4 M e m bu a t I n t e r fa ce

Unt uk m em buat int erface, kit a t ulis,

public interface [InterfaceName] {

//beberapa method tanpa isi }

Sebagai cont oh, m ari kit a m em buat sebuah int erface yang m endefinisikan hubungan ant ara dua obj ect m enurut urut an asli dari obj ect .

public interface Relation {

(13)

Pengenalan Pem rogram an 1 13 Sekarang, penggunaan int erface, kit a gunakan kat a kunci im ple m e n ts. Cont ohnya,

/**

* Class ini mendefinisikan segmen garis */

public class Line implements Relation {

private double x1; private double x2; private double y1; private double y2;

public Line(double x1, double x2, double y1, double y2){ this.x1 = x1;

double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length;

}

public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen);

}

public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen);

}

public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen);

(14)

Pengenalan Pem rogram an 1 14 Ket ika class Anda m encoba m engim plem ent asikan sebuah int erface, selalu past ikan bahwa Anda m engim plem ent asikan sem ua m et hod dari int erface, j ika t idak, Anda akan m enem ukan kesalahan ini,

Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in int erface. Sebuah cont oh dari sebuah class yang m engim plem ent asikan int erface adalah,

public class Person implements PersonInterface, LivingThing,

public class ComputerScienceStudent extends Student implements PersonInterface,

LivingThing { //beberapa kode di sini

}

Cat at an bahwa sebuah int erface bukan bagian dari hirarki pewarisan class. Class yang t idak berhubungan dapat m engim plem ent asikan int erface yang sam a.

Pe t u nj u k pe nu lisa n pr ogra m :

(15)

Pengenalan Pem rogram an 1 15

1 1 .5 .6 Pe w a r isa n An t a r I n t e r fa ce

I nt erface bukan bagian dari hirarki class. Bagaim anapun, int erface dapat m em punyai hubungan pewarisan ant ara m ereka sendiri. Cont ohnya, m isal kit a punya dua int erface

St u de n tI n t er face dan Pe r son I n t e rfa ce. Jika St udent I nt erface m eng- ext end PersonI nt erface, m aka ia akan m ewariskan sem ua deklarasi m et hod dalam PersonI nt erface.

public interface PersonInterface { . . .

}

public interface StudentInterface extends PersonInterface { . . .

(16)

Pengenalan Pem rogram an 1 16

1 1 .6 La t ih a n

1 1 .6 .1 Ex t e n d St u den t Re cor d

Dalam lat ihan ini, kit a ingin unt uk m em buat cat at an siswa yang lebih khusus yang berisi inform asi t am bahan t ent ang penget ahuan kom put er siswa. Tugasnya adalah m eng- ext end class St udent Record yang m engim plem ent asikan pelaj aran sebelum nya. Cobalah unt uk m eng- override beberapa m et hod yang ada dalam superclass St udent Record, j ika Anda benar- benar m em but uhkannya.

1 1 .6 .2 Be n t uk Abst r a ct Cla ss

Gambar

Gambar 1: Hirarki class
Gambar 2: Alur Program
Gambar  4:  Class abstract

Referensi

Dokumen terkait