300 likes | 448 Views
OOP Java. 07 Advanced Class Features. Materi. The Object Class Static keywords Static Attributes Static Methods Static Initializer Final keyword Final Class Final Methods Final Attributes Rekursi Inner class Variable length argument. The Object Class (1). Deklarasi :
E N D
OOP Java 07 Advanced Class Features
Materi • The Object Class • Static keywords • Static Attributes • Static Methods • Static Initializer • Final keyword • Final Class • Final Methods • Final Attributes • Rekursi • Inner class • Variable length argument
The Object Class (1) • Deklarasi : • public class Employee { • private String department; • // dst • } • Apakah Sama dengan : • public class Employee extends Object { • private String department; • // dst • }
The Object Class (2) • Kelas Object merupakan induk dari semua kelas di java. • Jika sebuah kelas dideklarasikan tanpa keyword extends, maka kompilator akan menambahkan ‘extends Object’ secara implisit.
Static Keywords (1) • Attribut/ method/ nested class yg meng-gunakan keyword static berasosiasi dengan kelasnya bukan instance dari kelas (objek) nya. • Sehingga attribut/ method/ nested class yg meng-gunakan keyword static disebut sebagai class member bukan object member. • Atribut kelas bertipe static dapat digunakan sebagai atribut/variabel yang di-share oleh semua instance (objek) dari kelas tsb. • Atribut bertipe static mirip dengan variabel global pada bahasa pemrograman lain, karena java tidak memiliki variabel global.
Static Keywords – Attributes (2) • Sebagai contoh, atribut static dapat digunakan untuk mengcounter berapa banyak objek yg sudah dibuat dari sebuah kelas. • Pada diagram kelas, atribut static ditandai dengan garis bawah. • Atribut static disebut juga : class attribute
Static Keywords – Attributes (3) Count +counter : int = 0 -serialNumber : int <<instanceOf>> <<instanceOf>> obj1 : Count obj2 : Count -serialNumber = 1 -serialNumber = 2
Static Keywords – Attributes (4) • Setiap kali dibuat objek dari kelas Count , maka constructor Count() akan menambah nilai variabel static counter, dan setiap objek yang dibuat akan memiliki serialNumber yang berbeda-beda public class Count { private int serialNumber; public static int counter = 0; public Count() { counter++; serialNumber = counter; } public int getSerialNumber() { return serialNumber; } }
Static Keywords – Attributes (5) • Jika atribut static tidak bersifat private, maka atribut tersebut dapat diakses dari kelas lain dengan tanpa membuat instance (objek) nya. public class TestCount { public static void main(String[] arg) { System.out.println("Counter : " + Count.counter); Count obj1 = new Count(); System.out.println("Creating object1..."); System.out.println("Counter : " + Count.counter); System.out.println("Serial number : " + obj1.getSerialNumber()); Count obj2 = new Count(); System.out.println("Creating object2..."); System.out.println("Counter : " + Count.counter); System.out.println("Serial number : " + obj2.getSerialNumber()); } }
Static Keywords – Methods (6) public class Count2 { private int serialNumber; private static int counter = 0; public Count2() { counter++; serialNumber = counter; } public static int getTotalCount() { return counter; } public int getSerial() { return serialNumber; } public static int getStaticSerial() { return serialNumber; //error } }
Static Keywords – Methods (7) public class TestCount2 { public static void main(String[] ar) { System.out.println(“Counter : ” + Count2.getTotalCount()); Count2 obj1 = new Count2(); System.out.println(“Counter : ” + Count2.getTotalCount()); System.out.println(“Serial number : ” + obj1.getSerial()); Count2 obj2 = new Count2(); System.out.println(“Counter : ” + Count2.getTotalCount()); System.out.println(“Serial number : ” + obj2.getSerial()); } }
Static Keywords – Methods (8) • Method static disebut juga : class method. • Class method dapat diakses tanpa membuat instance (objek) nya. • Class method dipanggil bukan menggunakan nama objeknya, tetapi menggunakan nama kelasnya.
Static Keywords – Methods (9) • Karena static method bukan bagian dari objek, maka didalam static method tidak dapat digunakan this. • Konsekuensinya static method tidak dapat mengakses variabel lain, selain variabel lokal, atribut static, dan parameternya. Jika mengakses atribut objek yg tidak static akan menyebabkan error waktu dikompilasi.
Static Keywords – Initializer (10) public class Count4 { public static int counter; static { counter = 5; } } //------------------------------------------------------------ public class TestCount4 { public static void main(String[] args) { System.out.println(“Counter : ” + Count4.counter); } }
Static Keywords – Initializer (11) • Sebuah kelas dapat memiliki static block, yang bukan merupakan bagian dari method. • Static block dieksekusi satu kali pada saat kelas di-load ke memori, sehingga biasanya digunakan untuk menginisialisasi static atribut.
Final Keywords – Class (1) public final class Human { private String nama; private int umur; } //------------------------------- public class Mhs extends Human { //error }
Final Keywords – Class (2) • Keyword final dapat digunakan dalam mendeklarasikan : kelas, method, atribut. • Keyword final mirip dengan const / konstanta pada bahasa lain. • Jika kelas menggunakan keyword final, maka kelas tersebut tidak dapat diturunkan lagi.
Final Keywords – Methods (3) public class Manusia2 { private String nama; protected int umur; public final int getUmur() { return umur; } public int getUmur(int tambah) { //coba overload return (umur+tambah); } }
Final Keywords – Methods (4) public class Mhs2 extends Manusia2 { public int getUmur() { //coba override (error) return (umur+1); } }
Final Keywords – Methods (5) • Jika method menggunakan keyword final, maka method tersebut tidak dapat di-override. • Ini berguna jika kita memiliki implementasi sebuah method yg kritikal dan tidak boleh diganti oleh turunannya.
Final Keywords – Attribute (6) public class Customer { private final long minimumSaving = 100000; private final long customerID; public Customer() { customerID = createID(); } private long createID() { int c = 1000; c++; return c; } public String toString() { String str; str ="Min Saving : " + minimumSaving + '\n' + "Customer ID : " +customerID; minimumSaving++; //error cannot assign a value to final variable return str; } }
Final Keywords – Attribute (7) • Jika atribut menggunakan keyword final, maka nilai atribut/variabel tersebut tidak dapat diubah (= const). • Jika deklarasi final variabel tidak diinisialisasi, maka nilainya dapat diassign satu kali didalam constructornya.
Rekursi (1) public class Faktorial { //fungsi rekursif public int factorR(int n) { int hasil; if (n == 1) return 1; hasil = factorR(n - 1) * n; return hasil; } //fungsi non-rekursif (loop) public int factorL(int n) { int hasil, c; hasil = 1; for (c = 1; c <= n; c++) hasil = hasil * c; return hasil; } } public class TestFaktorial { public static void main(String[] args) { ConsoleIn cons = new ConsoleIn(); String str; int n; Faktorial fa = new Faktorial(); System.out.print("Mencari faktorial dari : "); str = cons.bacaString(); n = Integer.parseInt(str); System.out.println("\nCara rekursif :" + n + " faktorial = " + fa.factorR(n)); System.out.println("Cara loop :" + n + " faktorial = " + fa.factorL(n)); } }
Rekursi (2) • Rekursi : proses mendefinisikan sesuatu dengan menggunakan dirinya sendiri • Method dapat bersifat rekursif (memanggil dirinya sendiri)
Inner Class (1) public class Outer { int[] bil; public Outer(int[] n) { bil = n; } public void Analisa() { Inner ino = new Inner(); System.out.println("Minimum : " + ino.min()); System.out.println("Maksimum : " + ino.max()); System.out.println("Rata-rata : " + ino.rata()); } //inner class class Inner { int min() { int m = bil[0]; for (int c = 1; c < bil.length; c++) if (bil[c] < m) m = bil[c]; return m; } int max() { int m = bil[0]; for (int c = 1; c < bil.length; c++) if (bil[c] > m) m = bil[c]; return m; } int rata() { int m = 0; for (int c = 0; c < bil.length; c++) m = m + bil[c]; return (m / bil.length); } } //end inner } //end outer public class TestInner { public static void main(String[] args) { int[] dat = {3, 8, 5, 7, 2, 9, 4, 5}; Outer out = new Outer(dat); out.Analisa(); } }
Inner Class (2) • Inner class : kelas yg dideklarasikan didalam kelas lain • Inner class hanya dapat diakses dari kelas outer-nya (kelas luarnya) • Inner class dapat mengakses member dari kelas luarnya • Kelas luarnya tidak dapat mengakses member dari kelas inner
Variable Length Arguments (1) public class VarArgs { public void cobaVa(int ...v) { int c; System.out.println("Banyaknya argumen : " + v.length); for (c = 0; c < v.length; c++) System.out.println("Argumen ke-" + c + " : " + v[c]); } } //------------------------------------------------------------------- public class TestVarArgs { public static void main(String[] args) { VarArgs varg = new VarArgs(); varg.cobaVa(); varg.cobaVa(7); varg.cobaVa(3, 7, 5); varg.cobaVa(1, 3, 5, 7, 9, 8, 6, 4, 2, 0); } }
Variable Length Arguments (2) • Variable argument length : argumen (parameter) method yg banyaknya bisa bervariasi • Ditunjukkan dengan … (tiga tanda titik) pada parameter method • Dapat diakses sebagai array