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
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;
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
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");
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 .
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;
}
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;
} }
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();
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,
Pengenalan Pem rogram an 1 10
public class Human extends LivingThing {
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
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 {
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);
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 :
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 { . . .
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.