Bab 11 - Pewarisan, Polimorfisme, dan Interface
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.