Kamis, 22 Desember 2016

Overriding Pada Java

Dalam bab sebelumnya, kita berbicara tentang superclasses dan subclass. Jika kelas mewarisi metode dari superclass-nya, maka ada kesempatan untuk mengganti metode yang diberikan bahwa itu tidak ditandai final.
Manfaat utama adalah: kemampuan untuk menentukan perilaku yang khusus untuk jenis subclass, yang berarti subclass dapat menerapkan metode kelas induk berdasarkan kebutuhannya.
Dalam hal berorientasi objek, utama berarti mengesampingkan fungsi dari metode yang ada.

Contoh

Mari kita lihat sebuah contoh.
class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
   }
}
Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Animals can move
Dogs can walk and run
Dalam contoh di atas, Anda dapat melihat bahwa meskipun b adalah jenis hewan itu berjalan metode bergerak di kelas Dog. Alasan untuk ini adalah: Dalam waktu kompilasi, cek dibuat pada jenis referensi. Namun, dalam runtime, JVM angka keluar jenis objek dan akan menjalankan metode yang dimiliki objek tertentu.
Oleh karena itu, dalam contoh di atas, program ini akan mengkompilasi benar sejak kelas Animal memiliki metode bergerak. Kemudian, pada runtime, ia menjalankan metode khusus untuk objek.
Perhatikan contoh berikut -

Contoh

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      System.out.println("Dogs can walk and run");
   }
   public void bark() {
      System.out.println("Dogs can bark");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal a = new Animal();   // Animal reference and object
      Animal b = new Dog();   // Animal reference but Dog object

      a.move();   // runs the method in Animal class
      b.move();   // runs the method in Dog class
      b.bark();
   }
}
Ini akan menghasilkan hasil sebagai berikut -

Keluaran

TestDog.java:26: error: cannot find symbol
      b.bark();
       ^
  symbol:   method bark()
  location: variable b of type Animal
1 error
Program ini akan melemparkan kesalahan waktu kompilasi sejak b tipe referensi Animal tidak memiliki metode dengan nama kulit.

Aturan untuk Metode Melebihi

  • Daftar argumen harus persis sama dengan metode ditimpa.
  • Jenis kembali harus sama atau subtipe dari jenis kembali dideklarasikan pada metode ditimpa asli dalam superclass.
  • Tingkat akses tidak bisa lebih ketat daripada tingkat akses metode ditimpa ini. Sebagai contoh: Jika metode superclass dinyatakan publik maka metode overridding di sub class dapat tidak baik pribadi atau dilindungi.
  • contoh metode dapat diganti hanya jika mereka diwarisi oleh subclass.
  • Sebuah metode dideklarasikan final tidak dapat diganti.
  • Sebuah metode dinyatakan statis tidak dapat diganti namun dapat kembali dinyatakan.
  • Jika metode tidak dapat diwariskan, maka tidak dapat diganti.
  • Sebuah subclass dalam paket yang sama seperti superclass contoh ini dapat menimpa metode superclass yang tidak dinyatakan pribadi atau akhir.
  • Sebuah subclass dalam paket yang berbeda hanya dapat menimpa metode non-akhir dinyatakan publik atau dilindungi.
  • Sebuah metode utama dapat membuang apapun pengecualian hapus centang, terlepas dari apakah metode ditimpa melempar pengecualian atau tidak. Namun, metode utama seharusnya tidak membuang pengecualian yang baru atau lebih luas daripada yang dinyatakan oleh metode ditimpa diperiksa. Metode utama dapat membuang pengecualian sempit atau lebih sedikit dibandingkan dengan metode ditimpa.
  • Konstruktor tidak dapat diganti.

Menggunakan Kata Kunci yang super

Saat menjalankan versi superclass dari metode ditimpa dengan yang super kata kunci yang digunakan.

Contoh

class Animal {
   public void move() {
      System.out.println("Animals can move");
   }
}

class Dog extends Animal {
   public void move() {
      super.move();   // invokes the super class method
      System.out.println("Dogs can walk and run");
   }
}

public class TestDog {

   public static void main(String args[]) {
      Animal b = new Dog();   // Animal reference but Dog object
      b.move();   // runs the method in Dog class
   }
}
Ini akan menghasilkan hasil sebagai berikut -

Keluaran

Animals can move
Dogs can walk and run

Tidak ada komentar:

Posting Komentar