Mengenal Class dan Object lebih dalam (Bab 8.1 - 8.6)
Pada bab ini kita akan mendiskusikan relasi antara enum type dan class, serta mendiskusikan mengenai static class members dan final instance variabel secara detail.
Time Class Case Study
Pada contoh pertama, terdapat dua class yaitu Time1 dan Time1Test. Class Time1 merepresentasikan waktu dalam satu hari dan Class Time1Test merupakan pengaplikasian class yang mana method main membuat satu objek class Time1 dan kemudian memanggil method tersebut. Kedua class yaitu Time1 dan Time1Test dideklarasikan di file yang terpisah karena kedua class tersebut merupakan public class. Berikut adalah source code dari class Time1 :
- /**
- * Time1 Class
- *
- * @author Aufi FIllah
- */
- public class Time1
- {
- private int hour;
- private int minute;
- private int second;
- public void setTime(int h,int m, int s)
- {
- if((h>=0 && h<24) && (m>=0 && m<60) && (s>=0 && s<60))
- {
- hour = h;
- minute = m;
- second = s;
- }
- else
- {
- throw new IllegalArgumentException("hour,minute and/or second was out of range");
- }
- }
- public String toUniversalString()
- {
- return String.format("%02d:%02d:%02d",hour,minute,second);
- }
- public String toString()
- {
- return String.format("%d:%02d:%02d %s",((hour == 0 || hour == 12)? 12:hour%12),minute,second,(hour<12?"AM":"PM"));
- }
- }
Source code dari class Time1Test :
- /**
- * Time1Test Class
- *
- * @author Aufi Fillah
- */
- public class Time1Test
- {
- public static void main (String[] args)
- {
- Time1 time = new Time1();
- System.out.print("The initial universal time is : ");
- System.out.println(time.toUniversalString() );
- System.out.print("The initial standart time is : ");
- System.out.println(time.toString());
- System.out.println();
- time.setTime(13,27,6);
- System.out.print("Universal time after setTime is: ");
- System.out.println(time.toUniversalString());
- System.out.print("Standard time after setTime is : ");
- System.out.println(time.toString());
- System.out.println();
- try
- {
- time.setTime(99,99,99);
- }
- catch(IllegalArgumentException e)
- {
- System.out.printf("Exception: %s\n\n",e.getMessage());
- }
- System.out.println("After attempting invalid settings: ");
- System.out.print("Universal Time :");
- System.out.println(time.toUniversalString());
- System.out.print("Standart Time :");
- System.out.println(time.toString());
- }
- }
Memberikan output :
Controlling Access to Members
Tujuan utama dari public method adalah untuk menyajikan pandangan mengenai layanan yang disediakan oleh suatu class kepada clients dengan client tidak perlu tahu dengan bagaiaman cara class menyelesaikan tugasnya. Sehingga private variable dan private method tidak dapat diakses oleh clients. berikut contohnya. Source code :
- /**
- * Private members of class Time1 are not accessible.
- *
- * @author Aufi Fillah
- */
- public class MemberAccessTest
- {
- public static void main(String[] args)
- {
- Time1 time = new Time1();
- time.hour = 7;
- time.minute = 15;
- time.second = 30;
- }
- }
dan akan mengalami error seperti :
Referring to the Current Object's Members with the this Reference
Setiap object dapat mengakses dirinya sendiri dengan keyword "this" (biasanya disebut dengan this reference). This Reference juga dapat digunakan secara eksplisit dalam non-static method. berikut contoh source code :
- /**
- * this used implicitly and explicitly to refer to members of an object.
- *
- * @author Aufi Fillah
- */
- public class ThisTest
- {
- public static void main(String[] args)
- {
- SimpleTime time = new SimpleTime(15,30,19);
- System.out.println(time.buildString());
- }
- }
- class SimpleTime
- {
- private int hour;
- private int minute;
- private int second;
- public SimpleTime(int hour, int minute,int second)
- {
- this.hour = hour;
- this.minute = minute;
- this.second = second;
- }
- public String buildString()
- {
- return String.format("%24s: %s\n%24s: %s","this.toUniversalString()",
- this.toUniversalString(),"toUniversalString()",toUniversalString());
- }
- public String toUniversalString()
- {
- return String.format("%02d:%02d:%02d",this.hour,this.minute,this.second);
- }
- }
Didapat output :
Time Class Case Stuudy : Overloaded Constructors
kita dapat mendeklarasikan constructor kita sendiri untuk men-spesifik-an bagaiamana object suatu class harus diinisialisasi. Setelah itu, kita mendemonstrasikan sebuah class dengan beberapa overloaded constructors yang menjadikan suatu class dapat diinisialisasi dengan cara yang berbeda. Contoh source code Time2 :
- /**
- * Overloaded constructor used to initialize Time2 object
- *
- * @author Aufi Fillah
- */
- public class Time2
- {
- private int hour;
- private int minute;
- private int second;
- public Time2()
- {
- this(0,0,0);
- }
- public Time2(int h){
- this(h,0,0);
- }
- public Time2(int h, int m){
- this(h,m,0);
- }
- public Time2(int h,int m,int s){
- setTime(h,m,s);
- }
- public Time2(Time2 time){
- this(time.getHour(),time.getMinute(),time.getSecond());
- }
- public void setTime(int h, int m, int s){
- setHour(h);
- setMinute(m);
- setSecond(s);
- }
- public void setHour(int h){
- if(h>=0 && h<24)
- hour = h;
- else
- throw new IllegalArgumentException("hour must be 0-23");
- }
- public void setMinute(int m){
- if(m>=0 && m<60)
- minute = m;
- else
- throw new IllegalArgumentException("minute must be 0-59");
- }
- public void setSecond(int s){
- if(s>=0 && s<60)
- second = ((s>=0 && s<60)?s:0);
- else
- throw new IllegalArgumentException("second must be 0-59");
- }
- public int getHour(){
- return hour;
- }
- public int getMinute(){
- return minute;
- }
- public int getSecond(){
- return second;
- }
- public String toUniversalString(){
- return String.format("%02d:%02d:%02d",getHour(),getMinute(),getSecond());
- }
- public String toString(){
- return String.format("%d:%02d:%02d %s",
- ((getHour()==0 || getHour()==12)?12:getHour()%12),getMinute(),getSecond(),(getHour()<12?"AM":"PM"));
- }
- }
Serta penggunaan overloaded construction dari class Time2 (Time2 Test) source code :
- /**
- * Overloaded constructors used to initialize Time2 object
- *
- * @author Aufi Fillah
- */
- public class Time2Test
- {
- public static void main(String[] args){
- Time2 t1 = new Time2();
- Time2 t2 = new Time2(2);
- Time2 t3 = new Time2(21,34);
- Time2 t4 = new Time2(12,25,42);
- Time2 t5 = new Time2(t4);
- System.out.println("Constructed with: ");
- System.out.println("tl: all arguments defaulted");
- System.out.printf(" %s\n",t1.toUniversalString());
- System.out.printf(" %s\n",t1.toString());
- System.out.println(
- "t2: hour specified; minute and second defaulted");
- System.out.printf(" %s\n",t2.toUniversalString());
- System.out.printf(" %s\n",t2.toString());
- System.out.println(
- "t3: hour and minute specified;second defaulted");
- System.out.printf(" %s\n",t3.toUniversalString());
- System.out.printf(" %s\n",t3.toString());
- System.out.println(
- "t2: hour, minute and second defaulted");
- System.out.printf(" %s\n",t4.toUniversalString());
- System.out.printf(" %s\n",t4.toString());
- System.out.println(
- "t5: Time2 object t4 specified");
- System.out.printf(" %s\n",t5.toUniversalString());
- System.out.printf(" %s\n",t5.toString());
- try{
- Time2 t6 = new Time2(27,74,99);
- }
- catch(IllegalArgumentException e){
- System.out.printf("\nException while initializin t6: %s\n",
- e.getMessage());
- }
- }
- }
Dan didapat output :
Default and No-Argument Constructors
Setiap kelas memiliki paling tidak satu constructor, bahkan jika kita tidak menyediakannya maka compiler akan membuat constructor default tanpa arguments.
Sekian yang dapat kita pelajari pada blog kali ini, apabila ada kesalahan atau saran dapat meninggalkan komentar di bawah, Terimakasih.
Komentar
Posting Komentar