Rabu, 18 April 2012

Polymorphism

Polymorphism adalah kemampuan suatu objek untuk mengambil berbagai bentuk. Penggunaan paling umum dari polymorphism dalam OOP terjadi ketikareferensi kelas induk digunakan untuk merujuk ke objek kelas anak.

Setiap objek java yang bisa lewat lebih dari satu IS-Tes dianggap polimorfik.Dalam Java, semua objek java adalah polimorfik karena objek apapun akan melewati IS-A tes untuk tipe mereka sendiri dan untuk Obyek kelas.

Hal ini penting untuk mengetahui bahwa satu-satunya cara yang mungkin untuk mengakses suatu objek melalui variabel referensi. Sebuah variabel referensidapat dari hanya satu jenis. Setelah menyatakan jenis variabel referensi tidakdapat diubah.

Variabel referensi dapat dipindahkan ke objek lain asalkan tidak dideklarasikanakhir. Jenis variabel referensi akan menentukan metode yang dapat memanggilpada objek.

Sebuah variabel referensi dapat mengacu pada objek dari jenis dinyatakan atausubtipe dari jenis diumumkan. Sebuah variabel referensi dapat dideklarasikansebagai tipe kelas atau interface.

contoh:

Mari kita lihat contoh.
public interface Vegetarian{}
public class Animal{}
public class Deer extends Animal implements Vegetarian{}

Sekarang kelas Deer dianggap polimorfik karena ini memiliki multiple inheritance.Berikut ini penerapan contoh di atas:
·         A Deer IS-A aAnimal
·         A Deer IS-A Vegetarian
·         A Deer IS-A Deer
·         A Deer IS-A Object
Ketika kita menerapkan facts referensi variabel ke referensi obyek Deer, deklarasiberikut yang diperbolehkan:
Deer d = new Deer();
Animal a = d;
Vegetarian v = d;
Object o = d;

Semua variabel referensi d, a, v, o merujuk ke objek Deer sama di heap.

Virtual Metode:

Pada bagian ini, saya akan menunjukkan bagaimana perilaku metode ditimpa di Java memungkinkan Anda untuk mengambil keuntungan dari polymorphism ketika merancang kelas Anda.

Kita sudah bahas metode utama, di mana kelas anak dapat mengganti metodedalam induknya. Sebuah metode ditimpa pada dasarnya tersembunyi di kelas induk, dan tidak dipanggil kecuali kelas anak menggunakan kata kunci Superdalam metode utama.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polymorphism;

/**
 *
 * @author Ridhwan
 */
public class Polymorphism {

   private String name;
   private String address;
   private int number;
   public Polymorphism(String name, String address, int number)
   {
      System.out.println("Constructing an Polymorphism");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   public void mailCheck()
   {
      System.out.println("Mailing a check to " + this.name
       + " " + this.address);
   }
   public String toString()
   {
      return name + " " + address + " " + number;
   }
   public String getName()
   {
      return name;
   }
   public String getAddress()
   {
      return address;
   }
   public void setAddress(String newAddress)
  {
      address = newAddress;
  }
  public int getNumber()
  {
     return number;
  }
}

Sekarang anggaplah kita memperluas kelas Polymorphism sebagai berikut:
#kita membuat program baru.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polymorphism;

/**
 *
 * @author Ridhwan
 */
/* File name : Salary.java */
public class Salary extends Polymorphism
{
   private double salary; //Annual salary
   public Salary(String name, String address, int number, double
      salary)
   {
       super(name, address, number);
       setSalary(salary);
   }
   public void mailCheck()
  {
       System.out.println("Within mailCheck of Salary class ");
       System.out.println("Mailing check to " + getName()
       + " with salary " + salary);
   }
   public double getSalary()
   {
       return salary;
   }
   public void setSalary(double newSalary)
   {
       if(newSalary >= 0.0)
       {
          salary = newSalary;
       }
   }
   public double computePay()
   {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}
Sekarang Anda mempelajari program berikut dengan seksama dan mencoba untuk menentukan output-nya:
#kita membuat program baru.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polymorphism;

/**
 *
 * @author Ridhwan
 */
public class VirtualDemo
{
   public static void main(String [] args)
   {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta,  UP",
                                 3, 3600.00);
      Polymorphism e = new Salary("John Adams", "Boston, MA",
                                 2, 2400.00);
      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();
      System.out.println("\n Call mailCheck using Polymorphism reference--");
      e.mailCheck();
    }
}
Hal ini akan menghasilkan hasil sebagai berikut:



disini kita  menginstansiasi 2 objects Salary. satu menggunakan s referensiSalary, dan yang lainnya menggunakan e referensi Polymorphism.

Sementara memanggil s.mailCheck () compiler melihat MAILCHECK () di kelasSalary pada waktu kompilasi, dan JVM memanggil MAILCHECK () di kelasSalary pada run time.

Memanggil MAILCHECK () pada e sangat berbeda karena e adalah sebuah referensi Polymorphism. Ketika melihat e.mailCheck compiler (), compiler melihatmetode MAILCHECK () di kelas Polymorphism.

Di sini, pada waktu kompilasi, compiler menggunakan MAILCHECK () dalamPolymorphism untuk memvalidasi pernyataan ini. Pada run time, Namun, JVMmemanggil MAILCHECK () di kelas Salary.

Perilaku ini disebut sebagai pemanggilan metode virtual, dan metode yang disebut sebagai metode virtual. Semua metode di Java berperilaku dengan cara ini, dimana sebuah metode ditimpa dipanggil pada waktu berjalan, tidak peduli apa tipe data referensi adalah yang digunakan dalam kode sumber pada waktu kompilasi.




Tidak ada komentar:

Posting Komentar