Bab 11 - Pewarisan, Polimorfisme, dan Interface

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

protected String name; protected String address; /**

* Default constructor */

public Person(){

System.out.println(“Inside Person:Constructor”); name = "";

address = ""; }

/**

* Constructor dengan dua parameter */

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

this.address = address; }

/**

* Method accessor */

public String getName(){ return name;

}

public String getAddress(){ return address;

}

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 const ruct or YANG SAMA.

Pem akaian lain dari super adalah unt uk m enunj uk anggot a dari superclass( sepert i reference t h is) . Sebagai cont oh,

public Student() {

super.name = “somename”;

super.address = “some address”; }

1 1 .2 .3 Ove r r idin g M e t h od

Unt uk beberapa pert im bangan, t erkadang class asal perlu m em punyai im plem ent asi berbeda dari m et hod yang khusus dari superclass t ersebut . Oleh karena it ulah, m et hod 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 .

Misalnya kit a m em punyai im plem ent asi berikut unt uk m et hod get Nam e dalam superclass Person,

public class Person {

: :

public String getName(){

System.out.println("Parent: getName"); return name;

} : }

Unt uk override, m et hod get Nam e dalam subclass St udent , kit a t ulis, public class Student extends Person

{

: :

public String getName(){


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

}

Met hod st at ic j uga secara ot om at is final. I ni art inya Anda t idak dapat m em buat nya override.


(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 public class Employee extends Person

{

public String getName(){

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

}

Kem bali ke m et hod ut am a kit a, ket ika kit a m encoba m em anggil m et hod get Nam e dari reference Person ref, m et hod get Nam e dari obj ect St udent akan dipanggil. Sekarang, j ika 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(); printInformation( studentObject );

printInformation( employeeObject ); }


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

public abstract void someMethod(); Gam bar 4: Class abst ract


(10)

Pengenalan Pem rogram an 1 10 Sekarang m ari m em buat cont oh class abst ract .

public abstract class LivingThing {

public void breath(){

System.out.println("Living Thing breathing..."); }

public void eat(){

System.out.println("Living Thing eating..."); }

/**

* abstract method walk

* Kita ingin method ini di-overridden oleh subclasses */

public abstract void walk(); }

Ket ika class m eng-ext end class abst ract LivingThing, dibut uhkan unt uk override m et hod abst ract walk( ) , at au lainnya, j uga subclass akan m enj adi class abst ract , oleh karena it u t idak dapat di- inst ant iat e. Cont ohnya,

public class Human extends LivingThing {

public void walk(){

System.out.println("Human walks..."); }

}

Jika class Hum an t idak dapat overridde m et hod walk, kit a akan m enem ui pesan error berikut ini,

Human.java:1: Human is not abstract and does not override abstract method walk() in LivingThing

public class Human extends LivingThing ^

1 error

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

Gunakan class abst ract unt uk m endefinisikan secara luas sifat - sifat dari class t ert inggi pada hirarki pem rogram an berbasis obj ect , dan gunakan subclassesnya unt uk m enyediakan rincian dari class abst ract .


(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 class- class. Mereka m enyediakan class- class, t anpa m em perhat ikan lokasinya dalam hirarki class, unt uk m engim plem ent asikan sifat -sifat yang um um . Dengan cat at an bahwa int erface-int erface juga m enunj ukkan polim orfism e, dikarenakan program dapat m em anggil m et hod int erface dan versi yang t epat dari m et hod yang akan dieksekusi t ergant ung dari t ipe obj ect yang m elewat i pem anggil m et hod int erface.

1 1 .5 .1 Ke n a pa Kit a M e m a k a i I n t e r fa ce ?

Kit a akan m enggunakan int erface j ika kit a ingin class yang t idak berhubungan m engim plem ent asikan m et hod yang sam a. Melalui int erface-int erface, kit a dapat m enangkap kem iripan diant ara class yang t idak berhubungan t anpa m em buat nya seolah-olah class yang berhubungan.

Mari kit a am bil cont oh class Lin e dim ana berisi m et hod yang m enghit ung panj ang dari garis dan m em bandingkan obj ect Lin e ke obj ect dari class yang sam a. Sekarang, m isalkan kit a punya class yang lain yait u M yI n t e ger dim ana berisi m et hod yang m em bandingkan obj ect M yI n t e ge r ke obj ect dari class yang sam a. Sepert i yang kit a lihat disini, kedua class- class m em punyai m et hod yang m irip dim ana m em bandingkan m ereka dari obj ect lain dalam t ipe yang sam a, t et api m ereka t idak berhubungan sam a sekali. Supaya dapat m enj alankan cara unt uk m em ast ikan bahwa dua class- class ini m engim plem ent asikan beberapa m et hod dengan t anda yang sam a, kit a dapat m enggunakan sebuah int erface unt uk hal ini. Kit a dapat m em buat sebuah class int erface, kat akanlah int erface Re la t ion

dim ana m em punyai deklarasi m et hod pem banding. Relasi int erface dapat dideklarasikan sebagai,

public interface Relation {

public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }

Alasan lain dalam m enggunakan int erface pem rogram an obj ect adalah unt uk m enyat akan sebuah int erface pem rogram an obj ect t anpa m enyat akan classnya. Sepert i yang dapat kit a lihat nant i dalam bagian I nt erface vs class, kit a dapat benar- benar m enggunakan int erface sebagai t ipe dat a.

Pada akhirnya, kit a perlu m enggunakan int erface unt uk pewarisan m odel j am ak dim ana m enyediakan class unt uk m em punyai lebih dari sat u superclass. Pewarisan j am ak t idak dit unjukkan di Java, t et api dit unj ukkan di bahasa berorient asi obj ect lain sepert i C+ + .


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

public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }


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

this.x2 = x2; this.y1 = y1; this.y2 = y2; }

public double getLength(){

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 Relation

public class Line implements Relation ^

1 error

1 1 .5 .5 H u bun ga n da r i I n t e r fa ce k e Cla ss

Sepert i yang t elah kit a lihat dalam bagian sebelum nya, class dapat m engim plem ent asikan sebuah int erface selam a kode im plem ent asi unt uk sem ua m et hod yang didefinisikan dalam int erface t ersedia.

Hal lain yang perlu dicat at t ent ang hubungan ant ara int erface ke class- class yait u, class hanya dapat m engEXTEND SATU superclass, t et api dapat m engI MPLEMENTASI kan BANYAK int erface. Sebuah cont oh dari sebuah class yang m engim plem ent asikan int erface adalah,

public class Person implements PersonInterface, LivingThing,

WhateverInterface { //beberapa kode di sini

}

Cont oh lain dari class yang m eng- ext end sat u superclass dan m engim plem ent asikan sebuah int erface adalah,

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 :

Gunakan int erface unt uk m endefinisikan m et hod st andar yang sam a dalam class-class berbeda yang m em ungkinkan. Sekali Anda t elah m em buat kum pulan definisi m et hod st andar, Anda dapat m enulis m et hod t unggal unt uk m em anipulasi sem ua class-class yang m engim plem ent asikan int erface.


(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

Cobalah unt uk m em buat class abst ract yang dinam ai Shape dengan m et hod abst ract get Area( ) dan get Nam e() . Tulis dua subclasses- nya yait u Circle dan Square. Anda dapat m enam bahkan m et hod t am bahan ke dalam subclasses j ika diinginkan.


(1)

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 class- class. Mereka m enyediakan class- class, t anpa m em perhat ikan lokasinya dalam hirarki class, unt uk m engim plem ent asikan sifat -sifat yang um um . Dengan cat at an bahwa int erface-int erface juga m enunj ukkan polim orfism e, dikarenakan program dapat m em anggil m et hod int erface dan versi yang t epat dari m et hod yang akan dieksekusi t ergant ung dari t ipe obj ect yang m elewat i pem anggil m et hod int erface.

1 1 .5 .1 Ke n a pa Kit a M e m a k a i I n t e r fa ce ?

Kit a akan m enggunakan int erface j ika kit a ingin class yang t idak berhubungan m engim plem ent asikan m et hod yang sam a. Melalui int erface-int erface, kit a dapat m enangkap kem iripan diant ara class yang t idak berhubungan t anpa m em buat nya seolah-olah class yang berhubungan.

Mari kit a am bil cont oh class Lin e dim ana berisi m et hod yang m enghit ung panj ang dari garis dan m em bandingkan obj ect Lin e ke obj ect dari class yang sam a. Sekarang, m isalkan kit a punya class yang lain yait u M yI n t e ger dim ana berisi m et hod yang m em bandingkan obj ect M yI n t e ge r ke obj ect dari class yang sam a. Sepert i yang kit a lihat disini, kedua class- class m em punyai m et hod yang m irip dim ana m em bandingkan m ereka dari obj ect lain dalam t ipe yang sam a, t et api m ereka t idak berhubungan sam a sekali. Supaya dapat m enj alankan cara unt uk m em ast ikan bahwa dua class- class ini m engim plem ent asikan beberapa m et hod dengan t anda yang sam a, kit a dapat m enggunakan sebuah int erface unt uk hal ini. Kit a dapat m em buat sebuah class int erface, kat akanlah int erface Re la t ion

dim ana m em punyai deklarasi m et hod pem banding. Relasi int erface dapat dideklarasikan sebagai,

public interface Relation {

public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }

Alasan lain dalam m enggunakan int erface pem rogram an obj ect adalah unt uk m enyat akan sebuah int erface pem rogram an obj ect t anpa m enyat akan classnya. Sepert i yang dapat kit a lihat nant i dalam bagian I nt erface vs class, kit a dapat benar- benar m enggunakan int erface sebagai t ipe dat a.

Pada akhirnya, kit a perlu m enggunakan int erface unt uk pewarisan m odel j am ak dim ana m enyediakan class unt uk m em punyai lebih dari sat u superclass. Pewarisan j am ak t idak dit unjukkan di Java, t et api dit unj ukkan di bahasa berorient asi obj ect lain sepert i C+ + .


(2)

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 {

public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); }


(3)

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;

this.x2 = x2; this.y1 = y1; this.y2 = y2; }

public double getLength(){

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

} }


(4)

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

Relation

public class Line implements Relation ^

1 error

1 1 .5 .5 H u bun ga n da r i I n t e r fa ce k e Cla ss

Sepert i yang t elah kit a lihat dalam bagian sebelum nya, class dapat m engim plem ent asikan sebuah int erface selam a kode im plem ent asi unt uk sem ua m et hod yang didefinisikan dalam int erface t ersedia.

Hal lain yang perlu dicat at t ent ang hubungan ant ara int erface ke class- class yait u, class hanya dapat m engEXTEND SATU superclass, t et api dapat m engI MPLEMENTASI kan BANYAK int erface. Sebuah cont oh dari sebuah class yang m engim plem ent asikan int erface adalah,

public class Person implements PersonInterface, LivingThing,

WhateverInterface { //beberapa kode di sini

}

Cont oh lain dari class yang m eng- ext end sat u superclass dan m engim plem ent asikan sebuah int erface adalah,

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 :

Gunakan int erface unt uk m endefinisikan m et hod st andar yang sam a dalam class-class berbeda yang m em ungkinkan. Sekali Anda t elah m em buat kum pulan definisi m et hod st andar, Anda dapat m enulis m et hod t unggal unt uk m em anipulasi sem ua class-class yang m engim plem ent asikan int erface.


(5)

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


(6)

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

Cobalah unt uk m em buat class abst ract yang dinam ai Shape dengan m et hod abst ract get Area( ) dan get Nam e() . Tulis dua subclasses- nya yait u Circle dan Square. Anda dapat m enam bahkan m et hod t am bahan ke dalam subclasses j ika diinginkan.