JavaRush /Blog Jawa /Random-JV /Mekanisme overriding method utawa Override ing Jawa

Mekanisme overriding method utawa Override ing Jawa

Diterbitake ing grup
Hello! Sampeyan wis nggunakake cara ing Jawa lan ngerti akeh babagan. Sampeyan bisa uga nemoni kahanan sing ana akeh metode ing siji kelas kanthi jeneng sing padha nanging beda argumen. Yen sampeyan ngelingi, ing kasus kasebut, kita nggunakake mekanisme overloading metode. Dina iki ayo ndeleng kahanan sing beda. Mbayangno yen kita duwe siji cara umum, nanging kudu nindakake perkara sing beda-beda gumantung saka kelas sing diarani. Kepiye carane ngetrapake prilaku iki? Kanggo ngerteni, ayo njupuk kelas induk Animalsing nuduhake kewan lan nggawe metode kasebut voice- " swara ":
public class Animal {

   public void voice() {

       System.out.println("Voice!");
   }
}
Sanajan kita mung miwiti nulis program, sampeyan bisa ndeleng masalah potensial: ana akeh kewan ing donya, lan kabeh padha "ngomong" beda: kucing meow, ducks quack, ula hiss. Cara kerja mekanisme overriding - 2 Tujuane gampang: supaya ora nggawe macem-macem cara kanggo milih. Tinimbang nggawe cara voiceCat()kanggo meowing, voiceSnake()kanggo hissing, etc., kita pengin voice()ula kanggo hiss, kucing kanggo meow, lan asu kanggo babakan nalika cara disebut. Kita bisa kanthi gampang entuk iki nggunakake mekanisme overriding metode (Override in Java) . Wikipedia menehi panjelasan ing ngisor iki babagan istilah "overriding": Metode overriding ing pemrograman berorientasi obyek minangka salah sawijining fitur saka basa pamrograman sing ngidini subclass utawa kelas anak nyedhiyakake implementasi tartamtu saka metode sing wis dileksanakake ing salah sawijining superclass. utawa kelas induk. Iku, ing umum, bener. Overriding ngijini sampeyan kanggo njupuk cara saka kelas induk lan nulis implementasine dhewe saka cara iki ing saben kelas turunan. Implementasi anyar bakal "ngganti" wong tuwa ing kelas anak. Ayo ndeleng apa iki katon karo conto. Ayo nggawe 4 kelas penerus kanggo kelas kita Animal:
public class Bear extends Animal {
   @Override
   public void voice() {
       System.out.println("Р-р-р!");
   }
}
public class Cat extends Animal {

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

public class Dog extends Animal {

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


public class Snake extends Animal {

   @Override
   public void voice() {
       System.out.println("Ш-ш-ш!");
   }
}
A hack urip cilik kanggo mangsa: kanggo override cara saka kelas tiyang sepah, pindhah menyang kode saka kelas turunan ing Intellij IDE a, penet Ctrl + O banjur pilih " Override cara ... "saka menu. Biasane nggunakake hotkeys wiwit wiwitan, bakal nyepetake program nulis! Kanggo nyetel prilaku sing dikarepake, kita nindakake sawetara perkara:
  1. Kita nggawe metode ing saben kelas turunan kanthi jeneng sing padha karo metode ing kelas induk.
  2. Kita marang compiler sing kita jeneng cara padha ing kelas tiyang sepah kanggo alesan: kita wanted kanggo ngatasi prilaku sawijining. Kanggo "pesen" iki kanggo compiler, kita sijine anotasi @Override ing cara .
    Anotasi @Override sing diselehake ing ndhuwur metode ngandhani kompiler (lan programer uga maca kode sampeyan): "Kabeh ora apa-apa, iki dudu kesalahan utawa laliku. Aku elinga yen cara kaya ngono wis ana, lan aku pengin ngilangi."

  3. Kita nulis implementasine sing dibutuhake kanggo saben kelas turunan. Yen diarani, ula voice()kudu ngempet, bruwang kudu nggereng, lsp.
Ayo ndeleng carane iki bakal bisa digunakake ing 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.voice();
       animal2.voice();
       animal3.voice();
       animal4.voice();
   }
}
Output konsol: Woof! Meong! Rrr! Shhh! Apik banget, kabeh bisa ditindakake! Kita nggawe 4 variabel referensi saka kelas induk Animal, lan ditugasake menyang 4 obyek sing beda saka kelas turunan. Akibaté, saben obyek tumindak beda. Kanggo saben kelas turunan, cara sing diganti voice()ngganti cara "native" voice()saka kelas kasebut Animal(sing mung ngasilake "Voice!" menyang konsol). Cara kerja mekanisme overriding - 3 Overriding duwe sawetara watesan:
  1. Cara sing diganti kudu duwe argumen sing padha karo metode induk.

    Yen metode voiceing kelas induk ditampa minangka input String, metode sing ditindhes ing kelas anak uga kudu ditampa minangka input String, yen compiler bakal nggawe kesalahan:

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

  2. Cara sing ditimpa kudu duwe jinis bali sing padha karo metode induk.

    Yen ora, kita bakal nampa kesalahan kompilasi:

    public class Animal {
    
       public void voice() {
    
           System.out.println("Voice!");
       }
    }
    
    
    public class Cat extends Animal {
    
       @Override
       public String voice() {         //error!
           System.out.println("Meow!");
           return "Meow!";
       }
    }

  3. Modifier akses saka cara sing ditimpa uga ora bisa beda karo sing "asli":

    public class Animal {
    
       public void voice() {
    
           System.out.println("Voice!");
       }
    }
    
    public class Cat extends Animal {
    
       @Override
       private void voice() {      //error!
           System.out.println("Meow!");
       }
    }
Metode overriding ing Jawa minangka salah sawijining alat kanggo ngetrapake ide polimorfisme (prinsip OOP, sing kita rembugan ing kuliah pungkasan). Mulane, kauntungan utama nggunakake bakal keluwesan padha kita ngomong bab sadurungé. Kita bisa mbangun sistem kelas sing prasaja lan logis, sing saben-saben bakal duwe prilaku tartamtu (asu babakan, kucing meow), nanging kanthi antarmuka siji - siji cara voice()kanggo kabeh tinimbang akeh cara voiceDog(), voiceCat()lsp.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION