Jurusan Teknik Informatika - Unijoyo
1 6 8
konstruktor class Goose public Goose {
super4; panggil constructor induk
numberOfEggs = 2; lengkapi peran constructor }
public void talk { System.out.printlnHonk;
} public int getNumberOfEggs {
return numberOfEggs; }
public void setNumberOfEggsint n { numberOfEggs = n;
} }
•
Q. Gambarkan sketsa hirarki class dari hewan-hewan di atas Menggunakan Class Goose
public class FarmExample3 { public static void mainString[] args {
Animal[] farm = {new Goose, new Cow, new Pig, new Sheep};
System.out.println“The animals say:”; for int i=0; ifarm.length; i++
farm[i].talk;
} }
•
Q. Perlihatkan output dari program tersebut
•
Class Goose mempunyai suatu atribut tambahan, tetapi tetap sebagai bagian dari Animal, a kind of Animal.
Masalah Pada Polymorphism
•
Perhatikan kode berikut:
public class FarmExample4 { public static void mainString[] args {
Animal[] farm = {new Goose, new Cow, new Pig, new Sheep};
Diktat - Pemrograman Berorientasi Obyek 2007
1 6 9
for int i=0; ifarm.length; i++ { farm[i].talk;
System.out.printlnfarm[i].getNumberOfEggs+ “ eggs”;
} } end of main
}
•
Q. Eksekusi program tersebut, javac FarmExample4.java Apa hasil yang diperoleh, error?
•
Goose, Cow, Pig dan Sheep dapat diperlakukan sebagai jenis dari Animal, tetapi class-class ini tidak mengimplementasikan
semua metode
yang sama:
hanya Goose
yang mengimplementasikan metode getNumberOfEggs.
Casting Obyek
•
Barangkali masalah ini dapat diselesaikan dengan meng-cast obyek-obyek di dalam array ke class Goose?
public class FarmExample5 { public static void mainString[] args {
Animal[] farm = {new Goose, new Cow, new Pig, new Sheep};
for int i=0; ifarm.length; i++ { farm[i].talk;
System.out.printlnGoosefarm[i]. getNumberOfEggs+ “ eggs”;
} } end of main
}
•
Ini hanya bekerja terhadap elemen pertama array; program gagal dengan suatu run time casting exception.
FarmExample5
Honk 2 eggs
Moo Exception in thread main
java.lang.ClassCastException at FarmExample5.mainFarmExample5.java:6
Jurusan Teknik Informatika - Unijoyo
1 7 0
Operator instanceof
•
Pada contoh di atas, jika class dari suatu obyek diketahui, maka dapat diketahui pula apakah mungkin memanggil
metode getNumberOfEggs.
•
Ini dapat dilakukan menggunakan operator instanceof:
public class FarmExample6 { public static void mainString[] args {
Animal[] farm = {new Goose, new Cow, new Pig, new Sheep};
for int i=0; ifarm.length; i++ { farm[i].talk;
if farm[i] instanceof Goose System.out.printlnGoosefarm[i].
getNumberOfEggs+ “ eggs”; }
} end of main }
•
Output dari kode di atas adalah
Honk 2 eggs
Moo Grunt
Baa
•
Q. Saat mencapai pernyataan println, diketahui bahwa