Memahami Casting Pada Objek Dan Penggunaan Operator Instanceof

Hallo Gan, kali ini kita akan mendiskusikan mengenai casting pada objek dan penggunaan instanceof. Bagi yang sedang berguru pemrograman Java mungkin sering dipusingkan dengan istilah ini, namun sesungguhnya tidak serumit itu.

Baca juga:

Numerik casting
Casting char dengan tipe numerik

Apa Itu Casting Objek Pada Java?

Casting objek artinya adalah satu tipe referensi objek sanggup menjadi tipe casting pada tumpuan objek lainnya.

Casting objek ini terdiri dari:

  • Upcasting
  • Downcasting
 kali ini kita akan mendiskusikan mengenai casting pada objek dan penggunaan instanceof Memahami Casting Pada Objek Dan Penggunaan Operator instanceof

Upcasting objek


Upcasting objek ialah casting dari subtype ke supertype atau dari suatu objek subclass ke superclass. Atau sanggup dikatakan menuju ke arah atas dari rantai inheritance.

Untuk memahami dengan mudah, perhatikan teladan berikut ini:

public abstract class Handphone {    void panggilanMasuk(){   System.out.println("Berdering!");  }    void start(){   System.out.println("Layar aktif!");  }  } 


public class Samsung extends Handphone {      void panggilanMasuk(){   System.out.println("Hp samsung Berdering!");  }    void start(){   System.out.println("Layar Hp samsung aktif!");  }  } 


public class TestUpcasting {    public static void main(String[] args) {                    //membuat objek Samsung   Samsung samsung = new Samsung();              //menetapkan objek Samsung pada variabel tumpuan Handphone   Handphone hp = (Handphone) samsung;                    //memanggil method panggilanMasuk() dari class Samsung   hp.panggilanMasuk();                    //memanggil method start() dari class Samsung   hp.start();      /*   Atau sanggup juga di tulis lebih singkat dengan:      Handphone hp = new Samsung();   hp.panggilanMasuk();   hp.start();   */     }   }  


Apa yang terjadi pada isyarat ia atas ialah anda melaksanakan casting tipe Samsung ke tipe Handphone, naik ke atas rantai inheritance. Ini di kenal dengan upcasting.

Kalau begitu mengapa method dari class Samsung yang dipanggil?

Jawabannya ialah casting objek tidak mengubah objek faktual dari suatu class. Oleh alasannya ialah itu, "samsung" tetaplah objek dari class Samsung, hanya variabel referensinya saja yang berubah.

Dikarenakan upcasting itu selalu mengarah dari class yang lebih spesifik menuju ke class yang lebih umum, maka selalu kondusif dilakukan.

Kaprikornus hal yang perlu anda lakukan untuk upcasting ini ialah memutuskan objek pada variabel tumpuan dari superclass.

Mengapa upcasting dilakukan?
Upcasting dilakukan bila ingin menulis isyarat yang bekerjasama dengan supertype, ibarat teladan di bawah ini:

public abstract class Handphone {    void panggilanMasuk(){   System.out.println("Berdering!");  }    void start(){   System.out.println("Layar aktif!");  }  } 

public class Samsung extends Handphone {      void panggilanMasuk(){   System.out.println("Hp samsung Berdering!");  }    void start(){   System.out.println("Layar Hp samsung aktif!");  }  }


public class Apple extends Handphone {    void panggilanMasuk(){   System.out.println("Hp Apple Berdering!");  }    void start(){   System.out.println("Layar Hp Apple aktif!");  }  }


public class User {     public void pakaiHp(Handphone hp){       hp.start();       hp.panggilanMasuk();   }  } 


public class TestUpcasting {    public static void main(String[] args) {      Samsung samsung = new Samsung();   Apple apple = new Apple();      User user = new User();      user.pakaiHp(samsung);   user.pakaiHp(apple);  }  } 

Output:
Layar Hp samsung aktif!
Hp samsung Berdering!
Layar Hp Apple aktif!
Hp Apple Berdering!

Method pakaiHp() dari class user sanggup mendapatkan objek apapun yang merupakan subtype dari Handphone. Karena samsung merupakan subtype dari Handphone, maka objek tersebut di upcasting ke type Handphone dan sanggup dipassed-kan ke dalam parameter dari method pakaiHp().

Downcasting

Kebalikan dari upcasting, downcasting merupakan casting ke subtype, ke arah bawah dari rantai inheritance.

Perhatikan isyarat di bawah ini:

public abstract class Handphone {    void panggilanMasuk(){   System.out.println("Berdering!");  }    void start(){   System.out.println("Layar aktif!");  }  } 


public class Samsung extends Handphone {      void panggilanMasuk(){   System.out.println("Hp samsung Berdering!");  }    void start(){   System.out.println("Layar Hp samsung aktif!");  }  }


public class Apple extends Handphone {    void panggilanMasuk(){   System.out.println("Hp Apple Berdering!");  }    void start(){   System.out.println("Layar Hp Apple aktif!");  }  }


public class TestDowncasting {    public static void main(String[] args) {         Handphone hp = new Samsung();      //Downcasting   Samsung samsung = (Samsung) hp;      samsung.panggilanMasuk();   samsung.start();  }   }

Di sini anda melaksanakan casting dari tipe Handphone ke tipe Samsung. Namun, downcasting sanggup salah kalau objek faktual bukanlah merupakan objek target.

Misal dari isyarat di atas:

public class TestDowncasting {    public static void main(String[] args) {         Handphone hp = new Samsung();      //Downcasting yang salah   Apple apple = (Apple) hp;     }   }

Maka akan muncul ClassCastException, misalkan ibarat berikut ini:

Exception in thread "main" java.lang.ClassCastException: Samsung cannot be cast to Apple
at TestDowncasting.main(TestDowncasting.java:9)

Kenapa harus melaksanakan downcasting?
Downcasting lebih sering di lakukan di bandingkan dengan upcasting. Downcasting bertujuan untuk mengakses sikap dari suatu objek yang spesifik.

Untuk memastikan downcasting di lakukan pada objek faktual yang tepat, maka sanggup di uji dengan operator instanceof.

Menggunakan Operator instanceof


Operator ini berfungsi untuk menguji apakah suatu objek merupakan instance tipe spesifik dari class, subclass atau interface. Dikenal juga sebagai operator perbandingan alasannya ialah bekerja dengan cara membandingkan instance dengan tipe dan akan mengembalikan nilai true atau false.

Jika anda mengaplikasikan instanceof pada variabel dengan nilai null, maka akan mengembalikan nilai false.

Untuk lebih jelasnya perhatikan isyarat di bawah ini:

Contoh 1

public class Kendaraan {    public static void main(String[] args) {      Kendaraan kendaraan beroda empat = new Kendaraan();   System.out.println("Apakah kendaraan beroda empat ialah instance dari Kendaraan?");   System.out.println(mobil instanceof Kendaraan);  }  } 


Output:
Apakah kendaraan beroda empat ialah instance dari Kendaraan?
true



Contoh 2

Bila motor IS A  kendaraan (ingat konsep IS A pada inheritance), maka tipe objek Motor juga merupakan instance dari Kendaraan. Dengan kata lain, tipe objek dari subclass juga merupakan tipe dari superclass. Di bawah ini objek motor sanggup direferensikan oleh class Motor ataupun class Kendaraan.

public class Kendaraan {  }


public class Motor extends Kendaraan {    public static void main(String[] args) {      Motor motor = new Motor();   System.out.println("Apakah motor ialah tipe Kendaraan?");   System.out.println(motor instanceof Kendaraan);     }  }

Output:
Apakah motor ialah instance tipe Kendaraan?
true

Contoh 3

Berikut ini ialah teladan bila memakai instanceof pada variabel yang mempunyai nilai null, maka akan mengembalikan nilai false.

public class Motor {    public static void main(String[] args) {      Motor motor = null;   System.out.println("Apakah motor ialah instance dari Motor?");   System.out.println(motor instanceof Motor);     }  }

Output:
Apakah motor ialah instance dari Motor?
false

Contoh 4


public class Lingkaran{    private double radius = 7.88;    double hitungLuasLingkaran (){   double luas = 3.14 * (getRadius() * getRadius());   return luas;  }   public double getRadius() {   return radius;  }    } 


public class PersegiPanjang {    private double panjang = 5.48;  private double lebar = 3.75;    double hitungLuasPersegi(){   double luasPersegiPanjang = getPanjang() * getLebar();   return luasPersegiPanjang;  }   public double getPanjang() {   return panjang;  }    public double getLebar() {   return lebar;  }   } 


public class Casting_dan_instanceof {    public static void main(String[] args) {   //upcasting secara implisit   Object obj1 = new Lingkaran();   Object obj2 = new PersegiPanjang();      tampilkanObjek(obj1);   tampilkanObjek(obj2);  }    static void tampilkanObjek(Object obj){      //jika obj ialah instance dari Lingkaran   if (obj instanceof Lingkaran){    double x,y;    //downcasting secara eksplisit    x = ((Lingkaran)obj).getRadius();    y = ((Lingkaran)obj).hitungLuasLingkaran();        System.out.println("Panjang jari-jari bundar ialah " + x );        System.out.printf("Luas bundar ialah %5.2f", y);        System.out.println();   }      //jika obj ialah instance dari PersegiPanjang   else if (obj instanceof PersegiPanjang){        double x,y,z;    //downcasting secara eksplisit    x = ((PersegiPanjang)obj).getPanjang();    y = ((PersegiPanjang)obj).getLebar();    z = ((PersegiPanjang)obj).hitungLuasPersegi();        System.out.println("Panjang persegi panjang ialah " + x);        System.out.println("Lebar persegi panjang ialah " + y);        System.out.printf("Luas persegi panjang ialah %5.2f", z );   }  }  } 


Output:
Panjang jari-jari bundar ialah 7.88
Luas bundar ialah 194.98
Panjang persegi panjang ialah 5.48
Lebar persegi panjang ialah 3.75
Luas persegi panjang ialah 20.55

Casting hanya sanggup di lakukan kalau suatu objek merupakan instance dari class target. Kaprikornus operator instanceof akan memastikan apakah suatu objek merupakan instance dari class yang ditargetkan sebelum casting dilakukan.

Eksplisit casting pada PersegiPanjang dan Lingkaran perlu dilakukan alasannya ialah method-method ibarat getPanjang(), getLebar(), hitungLuasPersegi(), getRadius(), dan hitungLuasLingkaran() tidak dimiliki oleh class Object.

Belum ada Komentar untuk "Memahami Casting Pada Objek Dan Penggunaan Operator Instanceof"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel