Rabu, 18 April 2012

Inheritance

Inheritance dapat didefinisikan sebagai proses dimana satu objek memperolehproperti dari yang lain. Dengan menggunakan pewarisan informasi itu dikeloladalam urutan hirarkis.

Ketika kita berbicara tentang pewarisan kata kunci yang paling sering digunakanakan memperluas dan menerapkan. Kata-kata ini akan menentukan apakah satu objek IS-A jenis lain. Dengan menggunakan kata kunci tersebut kita dapat membuat satu objek memperoleh properti dari obyek yang lain.

IS-A Hubungan:

IS-A adalah cara untuk mengatakan: Objek ini adalah jenis objek. Mari kita melihat bagaimana kata kunci meluas digunakan untuk mencapai pewarisan.
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package animal;

/**
 *
 * @author Ridhwan
 */
public class Animal{
}

public class Mammal extends Animal{
}

public class Reptile extends Animal{
}

public class Dog extends Mammal{
}

Sekarang berdasarkan contoh di atas, Dalam Object Oriented hal berikut ini benar:
·         Animal is the superclass of Mammal class.
·         Animal is the superclass of Reptile class.
·         Mammal and Reptile are sub classes of Animal class.
·         Dog is the subclass of both Mammal and Animal classes.
Sekarang jika kita mempertimbangkan IS-Hubungan kita dapat mengatakan:
·         Mammal IS-A Animal
·         Reptile IS-A Animal
·         Dog IS-A Mammal
·         Hence : Dog IS-A Animal as well
Dengan menggunakan kata kunci meluas subclass akan dapat mewarisi semuaproperti dari superclass kecuali sifat pribadi dari superclass tersebut.

Kami dapat menjamin bahwa Mammal sebenarnya merupakan Animal dengan penggunaan operator misalnya.

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

/**
 *
 * @author Ridhwan
 */
public class Dog extends Mammal{
   public static void main(String args[]){

      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Hal ini akan menghasilkan hasil sebagai berikut:
Karena kita memiliki pemahaman yang baik tentang meluas kata kunci mari kita lihat bagaimana kata kunci alat yang digunakan untuk mendapatkan hubungan IS-A.

Kata kunci alat yang digunakan oleh kelas oleh mewarisi dari interface. Interfacetidak pernah dapat diperpanjang oleh kelas.

contoh:
public interface Animal {}
 
public class Mammal implements Animal{
}
 
public class Dog extends Mammal{
}

Contoh Kata Kunci:
Mari kita menggunakan operator instanceof untuk memeriksa menentukan apakahMammal sebenarnya Animal, dan anjing sebenarnya Animal
* To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package animal;

/**
 *
 * @author Ridhwan
 */
interface Animal{}

class Mammal implements Animal{}

class Dog extends Mammal{
   public static void main(String args[]){

      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}
Hal ini akan menghasilkan hasil sebagai berikut:

HAS-A Hubungan:

Hubungan ini terutama didasarkan pada penggunaan. Ini menentukan apakahkelas tertentu HAS-A hal tertentu. Hubungan ini membantu untuk mengurangi duplikasi kode serta bug.

Mari kita melihat ke dalam sebuah contoh:
public class Vehicle{}
public class Speed{}
public class Van extends Vehicle{
                    private Speed sp;
} 
Hal ini menunjukkan bahwa kelas Van HAS-A Kecepatan. Dengan memiliki kelas terpisah untuk Kecepatan kita tidak harus meletakkan seluruh kode yang dimilikiuntuk mempercepat dalam kelas Van, yang memungkinkan untuk menggunakan kembali kelas Kecepatan dalam beberapa aplikasi..

Dalam fitur Berorientasi Objek pengguna tidak perlu repot-repot tentang objekyang melakukan pekerjaan nyata. Untuk mencapai ini, kelas Van menyembunyikanrincian implementasi dari pengguna dari kelas Van. SO pada dasarnya apa yang terjadi adalah pengguna akan meminta kelas Van untuk melakukan tindakan tertentu dan kelas Vann baik akan melakukan pekerjaan dengan sendirinya atau meminta kelas lain untuk melakukan tindakan.

Sebuah fakta yang sangat penting untuk diingat adalah bahwa Java hanya mendukung single inheritance. Ini berarti bahwa kelas tidak dapat memperpanjang lebih dari satu kelas. Oleh karena itu berikut yang ilegal:
public class extends Animal, Mammal{} 
Namun kelas dapat mengimplementasikan satu atau lebih interface. Hal ini telah membuat Java menyingkirkan ketidakmungkinan multiple inheritance


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.