Casting Objek Pada Java : Upcasting, Downcasting Dan Konversi Tipe Primitif

Seperti halnya casting pada tipe numerik, maka objek dari suatu class sanggup juga dicasting pada objek dari class lainnya. Casting objek pada Java artinya mengambil objek dari suatu tipe dan menetapkannya sebagai variabel referensi  dari tipe lainnya. Untuk sanggup melakukannya, maka ada persyaratan yang harus dipenuhi yaitu class dari objek yang akan dicasting harus terkait dengan inheritance.

Dengan kata lain, anda sanggup melaksanakan casting objek ini hanya pada suatu instance dari superclass ataupun subclass, dan bukan dari class lain secara acak.

Casting ini di bagi menjadi 2 bab yaitu upcasting dan downcasting.


 maka objek dari suatu class sanggup juga dicasting pada objek dari class lainnya Casting Objek Pada Java : Upcasting, Downcasting dan Konversi Tipe Primitif


Sebelum memasuki bahasan yang lebih detail, misalkan kita mempunyai hirarki class sebagai berikut:

Binatang > Kambing, Sapi

Binatang yaitu class abstract :

package com.bahasaJava.upcastingDowncasting;  public abstract class Binatang {      public void makan(){   System.out.println("Makan");  }    public void bergerak(){   System.out.println("Bergerak");  }    public void tidur(){   System.out.println("Tidur");  }   } 

Class Kambing extends Binatang:

package com.bahasaJava.upcastingDowncasting;  public class Kambing extends Binatang {    public void kambingBersuara(){   System.out.println("Mbeeek!");  }    public void makan(){   System.out.println("Kambing makan");  }  } 

Class Sapi extends Binatang:

package com.bahasaJava.upcastingDowncasting;  public class Sapi extends Binatang {    public void sapiBersuara(){   System.out.println("Mooooo!");  }  } 

Upcasting

Upcasting yaitu casting dari subtype ke supertype, menuju ke atas pada hirarki inheritance. Class Test berikut ini untuk mendemonstrasikan upcasting dari hirarki inheritance di atas:

package com.bahasaJava.upcastingDowncasting;  public class Test {   public static void main (String args []){      Kambing kambing = new Kambing();   Binatang hewan = (Binatang) kambing;   binatang.makan();     } } 

Di sini kita melaksanakan cast dari tipe Kambing ke tipe Binatang. Dikarenakan class Kambing merupakan subclass dari Binatang, maka casting ini disebut dengan upcasting.

Tipe objek nyata tidak berubah alasannya yaitu casting. Maka objek Kambing tetaplah objek Kambing, hanya referensinya saja yang berubah.

Upcasting ini selalu 'aman', alasannya yaitu anda memperlakukan suatu tipe menjadi tipe yang lebih umum. Pada pola di atas, Kambing mempunyai semua tingkah laris yang dimiliki oleh Binatang.

Mengapa upcasting dilakukan?

Pada umumnya upcasting ini tidak perlu dilakukan.

Bagaimanapun, anda memerlukan upcasting saat anda ingin menulis instruksi yang hanya bekerjasama dengan superclass.

Perhatikan pola berikut:

Class abstract Binatang:

package com.bahasaJava.upcastingDowncasting;  public abstract class Binatang {      public void makan(){   System.out.println("Makan");  }    public void bergerak(){   System.out.println("Bergerak");  }    public void tidur(){   System.out.println("Tidur");  }   } 


Class Kambing extends Binatang:

package com.bahasaJava.upcastingDowncasting;  public class Kambing extends Binatang {    public void kambingBersuara(){   System.out.println("Mbeeek!");  }    public void makan(){   System.out.println("Kambing makan");  }    public void bergerak(){   System.out.println("Kambing bergerak");   }  } 

Class Sapi extends Binatang:

package com.bahasaJava.upcastingDowncasting;  public class Sapi extends Binatang {    public void sapiBersuara(){   System.out.println("Mooooo!");  }    public void makan(){   System.out.println("Sapi makan");  }    public void bergerak(){   System.out.println("Sapi bergerak");   }  } 

Class Peternak:

package com.bahasaJava.upcastingDowncasting;  public class Peternak {    public void memberiMakan(Binatang a){   a.bergerak();   a.makan();  }  } 

Class Test untuk mendemonstrasikan:

package com.bahasaJava.upcastingDowncasting;  public class Test {   public static void main (String args []){      Kambing kambing = new Kambing();   Sapi sapi = new Sapi();   Peternak peternak = new Peternak();      peternak.memberiMakan(kambing);   peternak.memberiMakan(sapi);     } } 

Output:
Kambing bergerak
Kambing makan
Sapi bergerak
Sapi makan

Method memberiMakan() dari class Peternak sanggup mendapatkan objek apapun dari tipe Binatang. Makara tipe Kambing dan Sapi akan di-upcast ke tipe Binatang, saat objek tersebut di-pass-kan ke method memberiMakan().

Downcasting

Downcasting merupakan casting ke subtype, menuju ke arah bawah dari hirarki inheritance. Downcasting ini harus dilakukan secara eksplisit.

Perhatikan pola berikut:

package com.bahasaJava.upcastingDowncasting;  public class Test {   public static void main (String args []){      Binatang binatang1 = new Kambing();   Kambing kambing = (Kambing) binatang1;   kambing.bergerak();   kambing.makan();      Binatang binatang2 = new Sapi();   Sapi sapi = (Sapi) binatang2;   sapi.bergerak();   sapi.makan();     } } 

Dari instruksi di atas kita melaksanakan cast dari tipe Binatang ke tipe Kambing dan tipe Sapi. Karena Kambing dan Sapi merupakan subclass dari class Binatang, maka ini disebut dengan downcasting.

Tidak menyerupai upcasting, maka downcasting sanggup saja gagal dilakukan kalau tipe objek nyata bukanlah merupakan tipe objek target.

Contoh:

package com.bahasaJava.upcastingDowncasting;  public class Test {   public static void main (String args []){      Binatang binatang1 = new Kambing();   Sapi sapi = (Sapi) binatang1;     } } 

Kode diatas akan memperlihatkan ClassCastExecption alasannya yaitu tipe nyata objek yaitu tipe Kambing, dan Kambing bukanlah Sapi, jadi kita tidak sanggup meng-cast-nya ke tipe Sapi.

Contoh ClassCastException:
Exception in thread "main" java.lang.ClassCastException: com.bahasaJava.upcastingDowncasting.Kambing cannot be cast to com.bahasaJava.upcastingDowncasting.Sapi
    at com.bahasaJava.upcastingDowncasting.Test.main(Test.java:8)

Mengapa downcasting dilakukan?

Downcasting ini lebih sering dilakukan daripada upcasting. Anda sanggup memakai downcasting untuk mengakses behaviour spesifik dari suatu subtype.

Perhatikan pola berikut ini, pada Class Peternak

package com.bahasaJava.upcastingDowncasting;  public class Peternak {    public void memberiMakan(Binatang a){   a.bergerak();   a.makan();    if (a instanceof Kambing){   Kambing kambing = (Kambing) a;   kambing.makan();   }  } } 

Di sini, pada method memberiMakan(), kita sanggup menyelidiki apakah ada objek Kambing yang di-pass-kan pada method tersebut dengan memakai operator instanceof di line 9, yang akan mengecek tipe tertentu, kemudian dilakukan downcasting objek tersebut pada tipe Kambing dan memanggil method spesifiknya yaitu makan().

Apakah Tipe Primitif Dapat Dikonversi Menjadi Objek Dan Juga Sebaliknya?

Mungkinkah tipe primitif sanggup dikonversi menjadi tipe objek?

Jawabannya adalah  ini tidak sanggup dilakukan. Tipe primitif dan objek yaitu dua hal yang sangat berbeda dalam Java, sehingga anda juga tidak sanggup melaksanakan casting di antara keduanya.

Walapun demikian, package java.lang mempunyai beberapa class istimewa yang berkorespondensi dengan tipe data primitif tersebut. Seperti class Integer untuk int, class Floats untuk float, class Boolean untuk boolean dan sebagainya.




Hal yang perlu diperhatikan yaitu nama class memakai awalan abjad besar, sedangkan tipe primitif memakai awalan abjad kecil. Java memperlakukan kedua hal ini dengan sangat berbeda, jadi jangan dipusingkan oleh keduanya. Karena sanggup saja method dan variabel yang sudah anda memutuskan tidak berjalan sesuai dengan harapan anda.

Dengan memakai method yang sudah terdapat pada class-class tersebut, maka anda sanggup menciptakan objek yang equivalen dengan semua tipe-tipe primitif dengan memakai keyword new.

Contoh berikut ini yaitu baris instruksi untuk menciptakan instance dari class Integer dengan nilai 10 :

Integer myInteger = new Integer(10);

Dari instruksi tersebut anda telah menciptakan objek nyata dari class Integer, maka anda sanggup memperlakukan nilai tersebut sebagai objek.

Kemudian kalau contohnya anda ingin mendapatkan nilai primitif tersebut, anda sanggup memakai method yang terdapat pada class Integer yaitu intValue(), yang akan mengembalikan nilai primitif int dari suatu objek Integer.

Perhatikan pola di bawah ini:

package com.bahasaJava;  public class Test {    public static void main(String args []){      Integer myInteger = new Integer(10);   int x = myInteger.intValue();   System.out.println("Nilai int x yaitu " + x);      Float myFloat = new Float(12.73);   float y = myFloat.floatValue();   System.out.println("Nilai float y yaitu " + y);      Boolean myBoolean = new Boolean(x > y);   boolean z = myBoolean;   System.out.println("Nilai boolean z yaitu " + z);    }  } 

Output:
Nilai int x yaitu 10
Nilai float y yaitu 12.73
Nilai boolean z yaitu false

Untuk lebih jelasnya anda sanggup melihat dokumentasi Java API wacana class-class istimewa ini serta mengenai method-method yang spesifik untuk mengkonversi tipe-tipe primitif ke objek dan sebaliknya.

Belum ada Komentar untuk "Casting Objek Pada Java : Upcasting, Downcasting Dan Konversi Tipe Primitif"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel