Animal
haýwanlary aňladýan ene-atalar synpyny alalyň we onda bir usul döredeliň voice
- “ ses ”:
public class Animal {
public void voice() {
System.out.println("Voice!");
}
}
Programmany ýaňy ýazyp başlasak-da, ýüze çykyp biläýjek meseläni görüp bilersiňiz: dünýäde haýwanlar kän we olaryň hemmesi başgaça “gürleýärler”: pişikler meow, ördekler, ýylanlar pyşyrdýarlar. Biziň maksadymyz ýönekeý: ses bermek üçin bir topar usul döretmekden saklanyň. voiceCat()
Kesmek, voiceSnake()
pyşyrdamak we ş.m. usullary döretmegiň ýerine voice()
, ýylanyň pyşyrdamagyny, usul diýlende itiň üýrmegini isleýäris. Usuly ýokaşdyrmak mehanizmini ulanyp, aňsatlyk bilen gazanyp bileris (Java-da override) . Wikipediýa “artykmaçlyk” adalgasynyň aşakdaky düşündirişini berýär: Obýekte gönükdirilen programmirleme usuly, kiçi klasa ýa-da çaga synpyna superklaslaryň birinde eýýäm ýerine ýetirilen usulyň belli bir ýerine ýetirilmegini üpjün etmäge mümkinçilik berýän programma diliniň aýratynlyklaryndan biridir. ýa-da ene-atalar sapaklary. Umuman, dogry. Artykmaçlyk ene-atalar synpynyň usulyny almaga we bu usulyň durmuşa geçirilişini her nesil synpynda ýazmaga mümkinçilik berýär. Täze durmuşa geçirmek, ene-atany çaga synpynda "çalşar". Mysal bilen munuň nähili bolýandygyny göreliň. Geliň, synpymyz üçin 4 sany yzygiderli synp döredeliň : 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("Ш-ш-ш!");
}
}
Geljek üçin kiçijik durmuş hakeri: ene synpyň usullaryny ýok etmek, Intellij IDE a-da nesil synpynyň koduna geçmek, Ctrl + O basyň we menýudan “ Usullary ýok ... ” saýlaň. Ilkibaşdan düwmejikleri ulanmaga öwrenişiň, ýazuw programmalaryny çaltlaşdyrar! Islän häsiýetimizi kesgitlemek üçin birnäçe zatlar etdik:
- Her nesil synpynda ene synpdaky usul bilen birmeňzeş at döretdik.
-
Kompilýora, bir sebäbe görä usulyň ene synpdaky ýaly at dakandygyny aýtdyk: onuň özüni alyp barşyny ýok etmek isledik. Düzüjä bu “habar” üçin usula @Override düşündiriş goýýarys .
Usulyň üstünde ýerleşdirilen @Override düşündiriş düzüjä (we koduňyzy okaýan programmistlere) şeýle diýýär: “Hemme zat gowy, bu ýalňyşlyk ýa-da ýatdan çykarylma. Şeýle usulyň eýýäm barlygy ýadyma düşýär we ony ýok etmek isleýärin ". - Her nesil synpy üçin zerur ýerine ýetiriş ýazdyk. Çagyrylanda ýylan
voice()
gygyrmaly, aýy möňňürmeli we ş.m.
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();
}
}
Konsol çykyşy: Woof! Meow! Rrrr! Şhh! Gowy, hemme zat bolmalysy ýaly işleýär! Ene synpyň 4 salgylanma üýtgeýjisini döretdik Animal
we olary nesil synplarynyň 4 dürli obýektine belledik. Netijede, her bir zat başgaça hereket edýär. Nesil synplarynyň her biri üçin artykmaç usul synpdan voice()
“ýerli” usulyny çalyşdy (diňe “Ses!” Konsoluna çykýar). Artykmaçlygyň birnäçe çäklendirmeleri bar: voice()
Animal
-
Artykmaç usulda ene-atanyň usuly ýaly argumentler bolmaly.
voice
Ene-atalar synpyndaky bir usul giriş hökmünde kabul edilseString
, çaga synpynda ýokaşdyrylan usul hem giriş hökmünde kabul edilmelidirString
, ýogsam düzüji ýalňyşlyk goýberer: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!"); } }
-
Artykmaç usul ene-atanyň usuly bilen birmeňzeş bolmaly.
Otherwiseogsam, düzmek ýalňyşlygy alarys:
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!"; } }
-
Artykmaç usulyň giriş üýtgedijisi hem “asyl” usuldan tapawutlanyp bilmez:
public class Animal { public void voice() { System.out.println("Voice!"); } } public class Cat extends Animal { @Override private void voice() { //error! System.out.println("Meow!"); } }
voice()
topar usulyň ýerine hemmeler üçin bir usul voiceDog()
we voiceCat()
ş.m.
GO TO FULL VERSION