Download PERTEMUAN KE- 13, Anonymous Inner Class

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
1
PERTEMUAN KE- 13
Anonymous Inner Class
1.
Tujuan
•
2.
Membuat kelas di dalam kelas yang bersifat anonymous.
Teori
Seperti pada pertemuan sebelumnya, bahasa pemrograman Java mengijinkan anda
mendefinisikan inner class.
Ada dua tipe tambahan dari inner class. Anda dapat mendeklarasikan inner class di
dalam bodi method. Class seperti ini disebut local inner class. Anda juga dapat
mendeklarasikan inner class didalam bodi method tanpa memberi nama dari inner
class tersebut. Class seperti ini disebut dengan anonymous inner class. Cara ini
dipakai pada saat anda membuat hanya sebuah objek di dalam kelas ini, anda tidak
perlu memberi nama dari kelas tersebut.
Pada kenyataan pemrograman, anonymous inner class merupakan implementasi dari
interface. (Interface adalah seperti kelas yang anggotanya hanya berupa deklarasi
method, atau method yang tidak punya kode program).
Perhatikan kembali program pada pertemuan sebelumnya (file StrukturData.java). Di
kelas ini terdapat inner class dengan nama InnerIteratorGenap. Berikut potongan
programnya.
public class StrukturData {
. . .
//inner class untuk implementasi pola Iterator
private class InnerIteratorGenap {
//start mulai dari awal array
private int lanjut = 0;
public boolean hasNext() {
//cek apakah elemen sekarang adalah elemen terakhir array
return (lanjut <= SIZE - 1);
}
}
. . .
public int getNext() {
//ambil nilai dalam indeks genap dari array
int hasil = larikBulat[lanjut];
//teruskan ke elemen indeks genap selanjutnya
lanjut += 2;
return hasil;
}
}
Untuk menjadi anonymous inner class, kelas InnerIteratorGenap diubah menjadi
interface:
interface InnerIteratorGenap {
public boolean hasNext();
public int getNext();
}
Selanjutnya kita buat kelas yang
mengimplementasikan interface ini.
bersifat
anonymous
inner
class
untuk
2
3.
Pelaksanaan Praktikum
1. Perhatikan kembali file StrukturData.java yang terdapat pada pertemuan
sebelunya, seperti berikut. (yang dicetak tebal adalah yang akan diubah).
Catatan: agar anda masih punya file asli StrukturData.java, sebaiknya kopi file
ini menjadi file StrukturData2.java. Tentu saja ganti juga nama kelas menjadi:
public class StrukturData2. (dicetak miring dalam kode di bawah).
public class StrukturData2 {
//ciptakan array
private final static int SIZE = 15;
private int[] larikBulat = new int[SIZE];
public StrukturData2() {
//isi array dengan nilai bulat urut naik
for (int i = 0; i < SIZE; i++) {
larikBulat[i] = i;
}
}
public void printGenap() {
//cetak nilai dari indeks genap dari array
InnerIteratorGenap iterator = this.new InnerIteratorGenap();
while (iterator.hasNext()) {
System.out.print(iterator.getNext() + " ");
}
System.out.println();
}
//inner class untuk implementasi pola Iterator
private class InnerIteratorGenap {
//start mulai dari awal array
private int lanjut = 0;
public boolean hasNext() {
//cek apakah elemen sekarang adalah elemen terakhir array
return (lanjut <= SIZE - 1);
}
}
}
public int getNext() {
//ambil nilai dalam indeks genap dari array
int hasil = larikBulat[lanjut];
//teruskan ke elemen indeks genap selanjutnya
lanjut += 2;
return hasil;
}
public static void main(String s[]) {
//isi array dengan nilai bulat urut naik
// dan cetak nilai pada indeks genap
StrukturData2 sd = new StrukturData2();
sd.printGenap();
}
2. Tambahkan pada bagian paling atas file ini (di luar kelas StrukturData2) dengan
kode berikut:
// interface InnerIteratorGenap
// seperti class, tetapi tidak mempunyai
// implementasi method
interface InnerIteratorGenap {
public boolean hasNext();
public int getNext();
}
3
3. Hapuslah bagian inner class InnerIteratorGenap di bawah ini:
//inner class untuk implementasi pola Iterator
private class InnerIteratorGenap {
//start mulai dari awal array
private int lanjut = 0;
public boolean hasNext() {
//cek apakah elemen sekarang adalah elemen terakhir array
return (lanjut <= SIZE - 1);
}
}
public int getNext() {
//ambil nilai dalam indeks genap dari array
int hasil = larikBulat[lanjut];
//teruskan ke elemen indeks genap selanjutnya
lanjut += 2;
return hasil;
}
4. Gantilah method printGenap(): (yang dicetak tebal adalah yang akan diubah)
public void printGenap() {
//cetak nilai dari indeks genap dari array
InnerIteratorGenap iterator = this.new InnerIteratorGenap();
while (iterator.hasNext()) {
System.out.print(iterator.getNext() + " ");
}
System.out.println();
}
menjadi seperti berikut: (yang dicetak tebal adalah hasil perubahannya)
public void printGenap() {
//awal anonymous inner class
InnerIteratorGenap iterator = new InnerIteratorGenap(){
//start mulai dari awal array
private int lanjut = 0;
public boolean hasNext() {
//cek apakah elemen sekarang adalah elemen terakhir array
return (lanjut <= SIZE - 1);
}
public int getNext() {
//ambil nilai dalam indeks genap dari array
int hasil = larikBulat[lanjut];
//teruskan ke elemen indeks genap selanjutnya
lanjut += 2;
return hasil;
}
}; // akhir anonymous inner class
while (iterator.hasNext()) {
System.out.print(iterator.getNext() + " ");
}
System.out.println();
}
5. Kompilasi dan jalankan. Perhatikan hasilnya di layar:
4
6. Seperti interface InnerIteratorGenap, buatlah interface InnerIteratorSemua
di luar kelas StrukturData2 (sebaiknya pada bagian paling atas).
7. Seperti method printGenap(), buatlah method printSemua() di dalam kelas
StrukturData2,
yang
didalamnya
terdapat
anonymous
inner
class
dari
implementasi interface InnerIteratorSemua. Method printSemua() digunakan
untuk mencetak semua bilangan yang ada pada kelas ini.
8. Pada method main panggil method printSemua() seperti berikut:
sd.printSemua();
Contoh Lain
9. Buatlah kelas InnerClassTest, seperti berikut:
import
import
import
import
import
java.awt.*;
java.awt.event.*;
java.util.*;
javax.swing.*;
javax.swing.Timer;
/**
* Program mendemonstrasikan anonymous inner class
* penulis Cay Horstmann,
* sebagian telah diubah oleh Sudarmanto
*/
public class InnerClassTest {
public static void main(String[] args){
TalkingClock clock = new TalkingClock();
clock.start(1000, true);
// menjaga program tetap berjalan sampai user memilih "Ok"
JOptionPane.showMessageDialog(null, "Quit program?");
System.exit(0);
}
}
/**
* clock yang mencetak waktu pada interval tertentu
*/
class TalkingClock{
/**
* Memulai clock.
* @param interval: interval antar pesan(dalam milidetik)
* @param beep: true maka clock membunyikan beep
*/
private int interval;
private boolean beep;
public TalkingClock(){
this.interval = 500;
this.beep = false;
}
5
/**
Memulai clock.
*/
public void start(int interval, boolean beep) {
this.beep = beep;
ActionListener listener = new TimePrinter();
Timer t = new Timer(interval, listener);
t.start();
}
private class TimePrinter implements ActionListener{
public void actionPerformed(ActionEvent event){
Date now = new Date();
System.out.println("Waktu sekarang adalah: " + now);
if (beep) Toolkit.getDefaultToolkit().beep();
}
}
}
10. Kompilasi dan jalankan. Perhatikan hasilnya di layar.
4.
Tugas
1. Ubahlah program InnerClassTest ini (bagian kelas TimePrinter) sehingga
berbentuk anonymous inner class).