CodeGym /Java Blog /Acak /Metode Overriding di Jawa
John Squirrels
Level 41
San Francisco

Metode Overriding di Jawa

Dipublikasikan di grup Acak
Hai! Anda sudah menggunakan metode Java dan tahu banyak tentangnya. Anda mungkin pernah menghadapi situasi di mana satu kelas memiliki banyak metode dengan nama yang sama tetapi parameter berbeda. Anda akan ingat bahwa dalam kasus tersebut kami menggunakan metode overloading. Hari ini kami sedang mempertimbangkan situasi lain. Bayangkan kita memiliki satu metode bersama, tetapi harus melakukan hal yang berbeda di kelas yang berbeda. Bagaimana kita menerapkan perilaku ini? Untuk memahaminya, mari pertimbangkan kelas induk Hewan , yang merepresentasikan hewan, dan kita akan membuat metode bicara di dalamnya:

public class Animal {

   public void speak() {

       System.out.println("Hello!");
   }
}
Meskipun kami baru saja mulai menulis program, Anda mungkin melihat masalah potensial: ada banyak hewan di dunia ini, dan mereka semua 'berbicara' berbeda: kucing mengeong, dukun bebek, dan ular mendesis. Cara kerja metode overriding - 2Tujuan kami sederhana: hindari membuat banyak metode berbicara. Alih-alih membuat metode catSpeak() untuk mengeong, metode snakeSpeak() untuk mendesis, dll., kita ingin memanggil metode speak()metode dan membuat ular mendesis, kucing mengeong, dan anjing menggonggong. Kita dapat dengan mudah mencapai ini menggunakan metode overriding. Wikipedia memberikan penjelasan berikut tentang istilah 'overriding': Metode overriding, dalam pemrograman berorientasi objek, adalah fitur bahasa yang memungkinkan subclass atau kelas anak menyediakan implementasi spesifik dari metode yang sudah disediakan oleh salah satu superclass atau kelas induk Itu pada dasarnya benar. Penggantian metode memungkinkan Anda mengambil beberapa metode dari kelas induk dan menulis implementasi Anda sendiri di setiap kelas anak. Implementasi baru 'menggantikan' implementasi induk di kelas anak. Mari kita lihat bagaimana ini terlihat dalam sebuah contoh. Buat 4 kelas yang mewarisi kelas Hewan kita :

public class Bear extends Animal {
   @Override
   public void speak() {
       System.out.println("Growl!");
   }
}
public class Cat extends Animal {

   @Override
   public void speak() {
       System.out.println("Meow!");
   }
}

public class Dog extends Animal {

   @Override
   public void speak() {
       System.out.println("Woof!");
   }
}


public class Snake extends Animal {

   @Override
   public void speak() {
       System.out.println("Hiss!");
   }
}
"Berikut adalah lifehack kecil untuk masa depan: untuk mengganti metode kelas induk, buka kode kelas anak di IntelliJ IDE, Klik Ctrl+O, dan pilih "Override methods..." di menu. Biasakan menggunakan hot key sejak awal — ini akan membantu Anda menulis program lebih cepat!Untuk menentukan perilaku yang kami perlukan, kami melakukan beberapa hal:
  1. Di setiap kelas anak, kami membuat metode dengan nama yang sama dengan metode kelas induk.

  2. Kami memberi tahu kompiler bahwa penamaan metode yang sama seperti di kelas induk bukanlah kebetulan: kami ingin mengganti perilakunya. Untuk mengomunikasikan ini ke kompiler, kami menyetel anotasi @Override di atas metode.
    Ketika ditempatkan di atas metode, anotasi @Override memberi tahu kompiler (serta pemrogram yang membaca kode Anda): 'Semuanya baik-baik saja. Ini bukan kesalahan. Aku tidak pelupa. Saya sadar bahwa metode seperti itu sudah ada dan saya ingin menggantinya'.

  3. Kami menulis implementasi yang kami butuhkan untuk setiap kelas anak. Saat metode speak() dipanggil, ular harus mendesis, beruang menggeram, dll.
Mari kita lihat bagaimana ini bekerja dalam sebuah program:

public class Main {

   public static void main(String[] args) {

       Animal animal1 = new Dog();
       Animal animal2 = new Cat();
       Animal animal3 = new Bear();
       Animal animal4 = new Snake();

       animal1.speak();
       animal2.speak();
       animal3.speak();
       animal4.speak();
   }
}
Keluaran konsol:
Woof!
Meow!
Growl!
Hiss!
Bagus sekali! Semuanya bekerja sebagaimana mestinya! Kami membuat 4 variabel referensi yang menyimpan objek dari kelas induk Animal , dan kami menugaskan instance dari 4 kelas anak yang berbeda ke dalamnya. Akibatnya, setiap objek menunjukkan perilakunya sendiri. Untuk setiap kelas anak, metode speak() yang diganti menggantikan metode speak() 'asli' di kelas Hewan (yang hanya menampilkan 'Halo!'). Cara kerja metode overriding - 3Overriding memiliki beberapa batasan:
  1. Metode yang diganti harus memiliki parameter yang sama dengan metode induk.

    Jika metode speak kelas induk memiliki parameter String , metode override di kelas anak juga harus memiliki parameter String . Jika tidak, kompiler akan menghasilkan kesalahan:

    
    public class Animal {
    
       public void speak(String s) {
    
           System.out.println("Hello! " + s);
       }
    }
    
    public class Cat extends Animal {
    
       @Override // Error!
       public void speak() {
           System.out.println("Meow!");
       }
    }
    

  2. Metode yang diganti harus memiliki tipe pengembalian yang sama dengan metode induk.

    Jika tidak, kami akan mendapatkan kesalahan kompiler:

    
    public class Animal {
    
       public void speak() {
    
           System.out.println("Hello!");
       }
    }
    
    
    public class Cat extends Animal {
    
       @Override
       public String speak() {         // Error!
           System.out.println("Meow!");
           return "Meow!";
       }
    }
    

  3. Pengubah akses pada metode yang diganti juga harus sama dengan metode 'asli':

    
    public class Animal {
    	
          public void speak() {
    	
                System.out.println("Hello!");
          }
    }
    
    public class Cat extends Animal {
    
           @Override
           private void speak() {      // Error!
               System.out.println("Meow!");
           }
    }
    
Metode overriding di Java adalah salah satu cara untuk mengimplementasikan polimorfisme (prinsip OOP yang telah kami jelaskan di pelajaran sebelumnya). Artinya keunggulan utamanya adalah fleksibilitas yang sama seperti yang telah kita bahas sebelumnya. Kita dapat membangun sistem kelas yang sederhana dan logis, masing-masing memiliki perilaku tertentu (anjing menggonggong, kucing mengeong), dengan antarmuka umum — satu metode speak() untuk mereka semua daripada banyak metode, misalnya dogSpeak() , speakCat () , dll.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION