PBO Lanjutan Kelas (Lanjutan)
Composition Suatu class yang mempunyai field (instance variable) yang merupakan referensi obyek dari class yang lain Contoh : ada class Penduduk yang terdiri dari Nama dan Almt. Field Almt bisa saja merupakan referensi obyek dari class yang lain, yaitu Alamat yang berisi NamaJalan, Rt, Rw dan NoRumah
Contoh Program class Alamat { private String NamaJalan; private String Rt; private String Rw; private String NoRumah; public Alamat(String w, String x, String y, String z) NamaJalan =w; Rt=x; Rw=y; NoRumah=z; }
public String TampilAlamat() { return NamaJalan + " Rt." + Rt + " Rw." + Rw + " No." + NoRumah; } } //akhir dari class Alamat class Penduduk { private String Nama; private Alamat Almt; public Penduduk(String x, Alamat y) { Nama =x; Almt =y;} public String TampilOrang() { return Nama + "\nAlamatnya : "+Almt.TampilAlamat(); } //Akhir dari class Penduduk
Hasilnya: public class kompos1 { public static void main(String args[]) Alamat a = new Alamat("Petukangan","004","016","30"); Penduduk p1 = new Penduduk("Safrina", a); System.out.println(p1.TampilOrang()); } Hasilnya:
Garbage Collector Mengembalikan memory ke system Java melakukan hal ini secara otomatis Obyek bisa ditandai untuk garbage collection jika sudah tidak ada referensi ke obyek tersebut Ada method ‘finalize’ yang dijalankan sebelum garbage collector Methode finalize bersifat void dan tidak memerlukan parameter
class kursi { private int tinggi; private String warna; private static int jum_kursi; public kursi(int x, String y) tinggi=x; warna=y; jum_kursi=jum_kursi+1; System.out.println("konstruktor kursi dijalankan..."); } public String getWarna() return warna;
public int getTinggi() { return tinggi; } public int getJum_kursi() return jum_kursi; protected void finalize() jum_kursi=jum_kursi-1; System.out.println("Finalize dijalankan, jumlah obyek kursi skrg : “ +jum_kursi);
public class garbage1 { public static void main(String args[]) kursi k1 = new kursi(5,"Hijau"); kursi k2 = new kursi(10,"Merah"); System.out.println("Warna kursi : "+k1.getWarna()); System.out.println("Tinggi kursi : "+k1.getTinggi()); System.out.println("Jumlah kursi : "+k1.getJum_kursi()); System.out.println("Warna kursi : "+k2.getWarna()); System.out.println("Tinggi kursi : "+k2.getTinggi()); System.out.println("Jumlah kursi : "+k2.getJum_kursi()); k1=null; System.gc(); System.out.println("Jumlah kursi stlh gc : "+k2.getJum_kursi()); }
Hasilnya :
Static Class Member Menggunakan keyword ‘static’ Merupakan class variable (tiap obyek yang terbentuk dari class tersebut akan berbagi/share variabel yang sama), bukan instance variable Akses ke static class member yang bersifat public gunakan nama class nya dan tanda titik (.) Akses ke static class member yang bersifat private gunakan methodnya yang bersifat public
Contoh akses ke public static class member class kotak { private int panjang; private int lebar; public static int jum_kotak; public kotak(int x, int y) panjang = x; lebar = y; jum_kotak = jum_kotak + 1; } public int getKotak() return jum_kotak;
Hasilnya : public class kotak1 { public static void main (String args[]) kotak k1 = new kotak(3,2); System.out.println("Jumlah kotak : "+kotak.jum_kotak); kotak k2 = new kotak(4,3); } Hasilnya :
Contoh akses ke private static class member class kotak { private int panjang; private int lebar; private static int jum_kotak; public kotak(int x, int y) panjang = x; lebar = y; jum_kotak = jum_kotak + 1; } public int getKotak() return jum_kotak;
Hasilnya : public class kotak1 { public static void main (String args[]) kotak k1 = new kotak(3,2); System.out.println("Jumlah kotak : "+k1.getKotak()); kotak k2 = new kotak(4,3); System.out.println("Jumlah kotak : "+k2.getKotak()); //k2.getKotak() bisa juga diganti mjd k1.getKotak(), //karena mereka berbagi field jum_kotak } Hasilnya :
Final Instance Variable Menggunakan keyword ‘final’ Diterapkan pada instance variable atau field Untuk membuat konstanta Menyebabkan field tidak bisa diubah setelah proses inisialisasi.
Contoh Program : class kelas { private String namakelas; private final int jum_isi; public kelas(String x, int y) { namakelas=x; jum_isi=y;} public String getNamaKelas() { return namakelas;} public int getJum_isi() { return jum_isi;} /*public void nambah() jum_isi++; }*/ }
Hasilnya : public class final1 { public static void main(String args[]) kelas k1 = new kelas("XB",50); System.out.println("Isi final jum_isi : "+k1.getJum_isi()); } Hasilnya :
Kalau tanda remark pada class kelas dibuka, maka akan terjadi kesalahan. Karena field jum_isi yang bersifat final dicoba untuk diubah dengan cara ditambah dengan 1. Errornya :