JavaRush /Java Blog /Random-TK /Polimorfizm we onuň dostlary
Viacheslav
Dereje

Polimorfizm we onuň dostlary

Toparda çap edildi
Polimorfizm obýekte gönükdirilen programmirlemegiň esasy ýörelgelerinden biridir. Java-yň güýçli ýazuw güýjüni ulanmaga we ulanyp boljak we saklap boljak kod ýazmaga mümkinçilik berýär. Ol hakda köp zat aýdyldy, ýöne her kim bu syndan täze bir zat alyp biler diýip umyt edýärin.
Polimorfizm we onuň dostlary - 1

Giriş

Java programmirleme diliniň Oracle-a degişlidigini hemmämiz bilýäris öýdýärin. Şonuň üçin ýolumyz www.oracle.com sahypasyndan başlaýar . Baş sahypada "Menýu" bar. Onda, "Resminamalar" bölüminde "Java" bölümi bar. Diliň esasy funksiýalary bilen baglanyşykly hemme zat "Java SE resminamalaryna" degişlidir, şonuň üçin bu bölümi saýlaýarys. Resminamalar bölümi iň soňky wersiýasy üçin açylar, ýöne häzirlikçe "Başga çykaryş gözleýärsiňizmi?" Saýlawy saýlalyň: JDK8. Sahypada köp dürli wariantlary göreris. Emma Dili öwrenmek bilen gyzyklanýarys: " Java Tutorials Okuw ýollary ". Bu sahypada başga bir bölümi taparys: " Java dilini öwrenmek ". Bu iň mukaddes ýerler, Oracle-dan Java esaslary boýunça sapak. Java obýekte gönükdirilen programmirleme dilidir (OOP), şonuň üçin dili Oracle web sahypasynda-da öwrenmek “ Obýekte gönükdirilen programmirleme düşünjeleri ” esasy düşünjelerini ara alyp maslahatlaşmakdan başlaýar . Adyň özünden Java-yň obýektler bilen işlemäge gönükdirilendigi äşgärdir. " Obýekt näme? " Bölüminden Java-daky obýektleriň ýagdaýdan we özüni alyp barşyndan ybaratdygy aýdyňdyr. Bank hasabymyzyň bardygyny göz öňüne getiriň. Hasapdaky pul mukdary bir döwlet, bu döwlet bilen işlemegiň usullary özüni alyp barşdyr. Obýektleri haýsydyr bir görnüşde suratlandyrmaly (haýsy ýagdaýy we özüni alyp barşyny aýdyp beriň) we bu düşündiriş synpdyr . Käbir synpyň obýektini döredenimizde, bu synpy kesgitleýäris we oňa “ obýektiň görnüşi ” diýilýär. Şonuň üçin Java-yň " 4-nji bap görnüşleri, bahalary we üýtgeýänleri " bölüminde Java dil spesifikasiýasynda aýdylyşy ýaly güýçli ýazylan dil diýilýär . Java dili OOP düşünjelerine eýerýär we giňeldilen açar söz ulanyp mirasy goldaýar. Näme üçin giňelmeli? Sebäbi miras bilen çaga synpy ene-atanyň özüni alyp barşyna we ýagdaýyna miras galyp, olary dolduryp biler. esasy synpyň işleýşini giňeltmek. Şeýle hem , açar söz ulanyp, synp düşündirişinde interfeýs kesgitlenip bilner. Haçan-da bir synp interfeýsi amala aşyranda, bu synpyň käbir şertnamalara laýyk gelýändigini aňladýar - programmistiň daşky gurşawyň galan bölegine synpyň belli bir özüni alyp barşynyň beýany. Mysal üçin, pleýeriň dürli düwmeleri bar. Bu düwmeler pleýeriň özüni alyp barşyna gözegçilik etmek üçin interfeýs bolup, özüni alyp barşy pleýeriň içki ýagdaýyny üýtgeder (mysal üçin, ses). Bu ýagdaýda, düşündiriş hökmünde döwlet we özüni alyp barşy synp berer. Bir synp interfeýsi amala aşyrýan bolsa, bu synp tarapyndan döredilen obýekti diňe bir synp tarapyndan däl, eýsem interfeýs arkaly hem suratlandyryp bolar. Bir mysala seredeliň:
public class MusicPlayer {

    public static interface Device {
        public void turnOn();
        public void turnOff();
    }

    public static class Mp3Player implements Device {
        public void turnOn() {
            System.out.println("On. Ready for mp3.");
        }
        public void turnOff() {
            System.out.println("Off");
        }
    }

    public static class Mp4Player extends Mp3Player {
        @Override
        public void turnOn() {
            System.out.println("On. Ready for mp3/mp4.");
        }
    }

    public static void main(String []args) throws Exception{
        // Какое-то устройство (Тип = Device)
        Device mp3Player = new Mp3Player();
        mp3Player.turnOn();
        // У нас есть mp4 проигрыватель, но нам от него нужно только mp3
        // Пользуемся им How mp3 проигрывателем (Тип = Mp3Player)
        Mp3Player mp4Player = new Mp4Player();
        mp4Player.turnOn();
    }
}
Görnüş gaty möhüm düşündirişdir. Obýekt bilen nädip işlejekdigimizi aýdýar, ýagny obýektden haýsy gylyk-häsiýetlere garaşýarys. Özüňi alyp baryş usullary. Şonuň üçin usullara düşüneliň. Oracle web sahypasynda usullaryň Oracle Tutorial-da öz bölümleri bar: " Usullary kesgitlemek ". Makaladan ilkinji alynjak zat: Usul goly usulyň ady we parametrleriň görnüşleri :
Polimorfizm we onuň dostlary - 2
Mysal üçin, köpçülikleýin boşluk usuly (Obýekt o) yglan edilende, gol usulyň ady we Obýekt parametriniň görnüşi bolar. Yza gaýtarma görnüşi goluň içine girmeýär. Bu möhümdir! Indiki, deslapky kodumyzy düzeliň. Bilşimiz ýaly, munuň üçin kod synpyň ady we java giňeltmesi bilen bir faýlda saklanmalydyr. Java kody " javac " düzüjisini ulanyp, Java wirtual maşyn (JVM) tarapyndan ýerine ýetirilip bilinjek käbir aralyk formatda düzülýär. Bu aralyk formata bytekod diýilýär we .class giňeltmesi bolan faýllarda bar. Toplamak buýrugyny işledeliň: javac MusicPlayer.java java kody düzülenden soň ýerine ýetirip bileris. Başlamak üçin " java " kömekçi programmasyny ulanyp, synp faýlynda geçirilen bytekody ýerine ýetirmek üçin java wirtual maşyn prosesi başlar. Programmany işe girizmek buýrugyny işledeliň : java MusicPlayer. Ekranda println usulynyň giriş parametrinde görkezilen teksti göreris. Gyzykly tarapy, .class giňeldilen faýlda bytekodyň bolmagy, ony " javap " kömekçi kömegi bilen görüp bileris. Geliň, <ocde> javap -c MusicPlayer: buýrugyny işledeliň:
Polimorfizm we onuň dostlary - 3
Baýtkoddan synp görnüşi görkezilen obýektiň üsti bilen usuly çagyrmagyň ulanylandygyny invokevirtualwe düzüjiniň haýsy usulyň goluny ulanmalydygyny hasaplandygyny görüp bileris. Näme üçin invokevirtual? Sebäbi wirtual usulyň jaňy bar (çagyryş çagyryş hökmünde terjime edilýär). Wirtual usul näme? Bu, programma ýerine ýetirilende bedenini ýok edip boljak usul. Belli bir açar (usul goly) bilen usulyň göwrümi (kody) arasynda hat alyşma sanawynyň bardygyny göz öňüne getiriň. Programmanyň ýerine ýetirilişinde açar bilen usulyň arasyndaky bu hat alyşma üýtgäp biler. Şonuň üçin usul wirtualdyr. Düzgüne görä, Java-da statik däl, gutarnykly we şahsy däl usullar wirtualdyr. Munuň netijesinde Java polimorfizmiň obýekte gönükdirilen programmirleme ýörelgesini goldaýar. Öň düşünen bolmagyňyz mümkin, şu günki synymyz şu.

Polimorfizm

Resmi gollanmasynda Oracle web sahypasynda aýratyn bölüm bar: " Polimorfizm ". Java-da polimorfizmiň nähili işleýändigini görmek üçin Java Online Compiler-i ulanalyň . Mysal üçin, Java-da san görkezýän käbir abstrakt synp belgimiz bar . Näme rugsat berýär? Mirasçylaryň hemmesinde boljak käbir esasy usullary bar. San-dan miras galan her kim göni manyda: "Men bir san, siz meniň bilen san hökmünde işläp bilersiňiz" diýýär. Mysal üçin, islendik mirasdüşer üçin Integer bahasyny almak üçin intValue () usulyny ulanyp bilersiňiz. “Number for java api” -e seretseňiz, usulyň abstraktdygyny, ýagny “San” -yň her bir mirasdüşeriniň bu usuly durmuşa geçirmelidigini görüp bilersiňiz. Emma bu bize näme berýär? Bir mysala seredeliň:
public class HelloWorld {

    public static int summ(Number first, Number second) {
        return first.intValue() + second.intValue();
    }

    public static void main(String []args){
        System.out.println(summ(1, 2));
        System.out.println(summ(1L, 4L));
        System.out.println(summ(1L, 5));
        System.out.println(summ(1.0, 3));
    }
}
Mysaldan görnüşi ýaly, polimorfizmiň kömegi bilen, islendik görnüşdäki argumentleri san hökmünde nesil boljak giriş hökmünde kabul edip biljek usul ýazyp bileris (San alyp bilmeris, sebäbi abstrakt synp). Oýunçynyň mysalynda bolşy ýaly, bu ýagdaýda San ýaly bir zat bilen işlemek isleýändigimizi aýdýarys. San bolan her bir adamyň bitewi bahasyny üpjün edip bilmelidigini bilýäris. Bu bize ýeterlik. Belli bir obýektiň ýerine ýetirilişiniň jikme-jikliklerine girmek islemeýäris we Sanyň ähli nesillerine umumy usullar arkaly bu obýekt bilen işlemek islemeýäris. Bize elýeterli boljak usullaryň sanawy, düzüliş wagty (öň kod kodunda görşümiz ýaly) görnüşi boýunça kesgitlener. Bu ýagdaýda biziň görnüşimiz San bolar. Mysaldan görnüşi ýaly, dürli görnüşli dürli sanlary geçýäris, ýagny jemleýiş usuly giriş hökmünde Integer, Long we Double alar. Emma olaryň hemmesiniň umumylygy, abstrakt sanyň nesilleri, şonuň üçin intValue usulynda özlerini alyp barşlaryny ýok etmekdir, sebäbi her bir aýratyn görnüş, bu görnüşi “Integer” -e nädip taşlamalydygyny bilýär. Şeýle polimorfizm iňlis dilinde “overriding” diýlip atlandyrylýar.
Polimorfizm we onuň dostlary - 4
Artykmaç ýa-da dinamiki polimorfizm. Şeýlelik bilen, HelloWorld.java faýlyny aşakdaky mazmun bilen ýatda saklamak bilen başlalyň:
public class HelloWorld {
    public static class Parent {
        public void method() {
            System.out.println("Parent");
        }
    }
    public static class Child extends Parent {
        public void method() {
            System.out.println("Child");
        }
    }

    public static void main(String[] args) {
        Parent parent = new Parent();
        Parent child = new Child();
        parent.method();
        child.method();
    }
}
Geliň javac HelloWorld.javawe javap -c HelloWorld:
Polimorfizm we onuň dostlary - 5
Görşüňiz ýaly, usul jaňy bolan setirler üçin kod kodunda jaň etmegiň usulyna şol bir salgylanma görkezilýär invokevirtual (#6). Geliň java HelloWorld. Görşümiz ýaly, ene-atanyň we çaganyň üýtgeýjileri “Ene” görnüşi bilen yglan edilýär, ýöne ýerine ýetirişiň özi üýtgeýjä haýsy obýektiň bellenendigine (ýagny haýsy obýektiň görnüşine) görä diýilýär. Programma ýerine ýetirilende (iş wagty hem aýdýarlar) JVM, obýekte baglylykda, şol bir goly ulanyp usullary çagyranda, dürli usullary ýerine ýetirýärdi. .Agny, degişli goluň açaryny ulanyp, ilki bir usul usulyny aldyk, soň beýlekisini aldyk. Üýtgeýjide haýsy obýektiň bardygyna baglylykda. Programmanyň ýerine ýetirilişinde haýsy usulyň atlandyryljakdygyna bu kesgitleme giç baglamak ýa-da Dynamic Binding hem diýilýär. .Agny, gol bilen usul bedeniniň arasyndaky gabat geliş, usulyň çagyrylýan obýektine baglylykda dinamiki ýerine ýetirilýär. Elbetde, synpyň statiki agzalaryny (synp agzasy), şeýle hem giriş görnüşli hususy ýa-da jemleýji synp agzalaryny ýok edip bilmersiňiz. @Override düşündirişler hem döredijilere kömek edýär. Bu düzüjä şu wagt ata-babalarymyzyň usulyny alyp barşymyzy ýok etjekdigimize düşünmäge kömek edýär. Usul golunda ýalňyşlyk goýberen bolsak, düzüji derrew bu hakda bize habar berer. Mysal üçin:
public static class Parent {
        public void method() {
            System.out.println("parent");
        }
}
public static class Child extends Parent {
        @Override
        public void method(String text) {
            System.out.println("child");
        }
}
Erroralňyşlyk bilen düzülenok: ýalňyşlyk: usul supertipden bir usuly ýok etmeýär ýa-da durmuşa geçirmeýär
Polimorfizm we onuň dostlary - 6
Kesgitlemek “ kovariance ” düşünjesi bilen hem baglanyşyklydyr . Bir mysala seredeliň:
public class HelloWorld {
    public static class Parent {
        public Number method() {
            return 1;
        }
    }
    public static class Child extends Parent {
        @Override
        public Integer method() {
            return 2;
        }
    }

    public static void main(String[] args) {
        System.out.println(new Child().method());
    }
}
Görnüşinden düşnüksizlige garamazdan, manysy artykmaç bolanda, diňe ata-babada görkezilen görnüşi däl, eýsem has anyk görnüşini hem yzyna gaýtaryp bileris. Mysal üçin, ata-babalar San yzyna gaýtardy, we Sanlaryň nesli bolan Integer-i yzyna gaýtaryp bileris. Bu, usulyň atyşynda yglan edilen kadadan çykmalar üçin hem degişlidir. Mirasçylar usuly ýok edip, atylan kadadan çykmany arassalap bilerler. Emma olar giňelip bilmeýärler. .Agny, ene-ata IOException zyňsa, has takyk EOFException atyp bileris, ýöne kadadan çykma edip bilmeris. Şonuň ýaly-da, çäkleri çäklendirip bilmersiňiz we goşmaça çäklendirmeler girizip bilmersiňiz. Mysal üçin, statik goşup bilmersiňiz.
Polimorfizm we onuň dostlary - 7

Gizlenmek

“ Gizlemek ” ýaly bir zat bar . Mysal:
public class HelloWorld {
    public static class Parent {
        public static void method() {
            System.out.println("Parent");
        }
    }
    public static class Child extends Parent {
        public static void method() {
            System.out.println("Child");
        }
    }

    public static void main(String[] args) {
        Parent parent = new Parent();
        Parent child = new Child();
        parent.method();
        child.method();
    }
}
Bu hakda pikir etseňiz, gaty görnüp duran zat. Bir synpyň statiki agzalary synpa degişlidir, ýagny üýtgeýjiniň görnüşine. Şol sebäpden, çaga ene-atadan bolsa, bu usul çaga däl-de, ene-atanyň adyna çagyrylar. Öň kodda bolşy ýaly, kod koduna seretsek, statiki usulyň invokestatik ulanmak arkaly atlandyrylýandygyny göreris. Bu, JVM-e invokevirtual ýa-da invokeinterface ýaly usul tablisasyna däl-de, görnüşine seretmelidigini düşündirýär.
Polimorfizm we onuň dostlary - 8

Artykmaç ýüklemek usullary

Java Oracle Tutorial-da başga näme görýäris? Öň öwrenilen " Usullary kesgitlemek " bölüminde Artykmaç ýüklemek barada bir zat bar. Bu näme? Rus dilinde bu "artykmaç ýüklemek usuly" we beýle usullara "aşa ýüklemek" diýilýär. Şeýlelik bilen, artykmaç ýüklemek usuly. Bir seretseň, hemme zat ýönekeý. Onlaýn Java düzüjini açalyň, mysal üçin tutorialspoint online java compiler .
public class HelloWorld {

	public static void main(String []args){
		HelloWorld hw = new HelloWorld();
		hw.say(1);
		hw.say("1");
	}

	public static void say(Integer number) {
		System.out.println("Integer " + number);
	}
	public static void say(String number) {
		System.out.println("String " + number);
	}
}
Şeýlelikde, bu ýerde hemme zat ýönekeý görünýär. Oracle gollanmasynda aýdylyşy ýaly, artykmaç usullar (bu ýagdaýda aýtmak usuly) usula geçen argumentleriň sany we görnüşi boýunça tapawutlanýar. Birmeňzeş at we birmeňzeş mukdarda argument görnüşlerini yglan edip bilmersiňiz, sebäbi düzüji olary biri-birinden tapawutlandyryp bilmez. Derrew gaty möhüm bir zady bellemelidiris:
Polimorfizm we onuň dostlary - 9
Overagny, artykmaç ýüklenende düzüji dogrulygyny barlaýar. Bu möhümdir. Emma düzüji, belli bir usulyň çagyrylmalydygyny nädip kesgitleýär? Java dil spesifikasiýasynda beýan edilen "Iň anyk usul" düzgünini ulanýar: " 15.12.2.5. Iň anyk usuly saýlamak ". Onuň nähili işleýändigini görkezmek üçin, Oracle Certified Professional Java Programmer-den mysal alalyň:
public class Overload{
  public void method(Object o) {
    System.out.println("Object");
  }
  public void method(java.io.FileNotFoundException f) {
    System.out.println("FileNotFoundException");
  }
  public void method(java.io.IOException i) {
    System.out.println("IOException");
  }
  public static void main(String args[]) {
    Overload test = new Overload();
    test.method(null);
  }
}
Şu ýerden mysal alyň: https: //github.com/stokito/OCPJP/blob/master/src/ru/habrahabr/blogs/java/OCPJP1/question1/Overload.j ... Görşüňiz ýaly, geçýäris usuly ýok. Düzediji iň anyk görnüşini kesgitlemäge synanyşýar. Obýekt laýyk däl, sebäbi hemme zat ondan miras galypdyr. Öňe git. 2 kadadan çykma bar. Java.io.IOException- a seredeliň we "Göni belli kiçi toparlarda" FileNotFoundException-yň bardygyny göreliň. Fileagny, FileNotFoundException iň anyk görnüş bolup çykýar. Şonuň üçin netije "FileNotFoundException" setiriniň çykyşy bolar. Iöne IOException-y EOFException bilen çalyşsak, görnüşdäki agaçda iýerarhiýanyň deň derejesinde iki usulymyz bar, ýagny ikisi üçinem IOException ene-atadyr. Düzediji haýsy usula jaň etjekdigini saýlap bilmez we düzmek ýalňyşlygyny taşlar : reference to method is ambiguous. Moreene bir mysal:
public class Overload{
    public static void method(int... array) {
        System.out.println("1");
    }

    public static void main(String args[]) {
        method(1, 2);
    }
}
Çykar 1. Bu ýerde sorag ýok. Int ... görnüşi vararg https://docs.oracle.com/javase/8/docs/technotes/guides/language/varargs.html we hakykatdanam "sintaktik şeker" -den başga zat däl we aslynda int. .. massiwini int [] massiwi hökmünde okap bolýar. Indi bir usul goşsak:
public static void method(long a, long b) {
	System.out.println("2");
}
Soň bolsa 1 däl, 2 ​​görkezer, sebäbi 2 san geçýäris, 2 argument bolsa bir massiwden has gowy gabat gelýär. Usul goşsak:
public static void method(Integer a, Integer b) {
	System.out.println("3");
}
Şonda-da göreris 2. Sebäbi bu ýagdaýda başlangyçlar Integerdäki boksdan has takyk gabat gelýär. Şeýle-de bolsa, ýerine ýetirsek, method(new Integer(1), new Integer(2));3-nji çap ediler. Java-daky konstruktorlar usullara meňzeýär we gol almak üçin hem ulanylyp bilinýändigi sebäpli, aşa ýüklenen usullar ýaly şol bir “artykmaç ýükleme çözgüdi” düzgünleri ulanylýar. Java diliniň spesifikasiýasy bize " 8.8.8. Konstruktoryň artykmaç ýüklenmegi " -de aýdýar . Usulyň artykmaç ýüklenmegi = Irki baglanyşyk (aka Statik baglama) Siz köplenç ir we giç baglanyşyk hakda eşidip bilersiňiz, “Static Binding” ýa-da “Dynamic Binding” hem diýilýär. Olaryň arasyndaky tapawut gaty ýönekeý. Irki düzmek, giç, programmanyň ýerine ýetirilen pursady. Şonuň üçin irki baglanyşyk (statiki baglanyşyk), jemleniş wagtynda haýsy usulyň çagyryljakdygyny kesgitlemekdir. Dogrusy, giç baglamak (dinamiki baglanyşyk) programmanyň ýerine ýetirilende haýsy usula jaň etmelidigini kesgitlemekdir. Öň görşümiz ýaly (IOException-y EOFException-a üýtgedenimizde), düzüjiniň haýsy jaňy etmelidigine düşünip bilmezligi üçin usullary aşa köp ýüklesek, onda bir gezek ýalňyşlyk alarys: usula salgylanma düşnüksiz. Iňlis dilinden terjime edilen düşnüksiz söz düşnüksiz ýa-da näbellidir. Görnüşinden, artykmaç ýüklemek hökmanydyr, sebäbi barlag düzülende ýerine ýetirilýär. Netijelerimizi tassyklamak üçin, “ 8.4.9. Artykmaç ýüklemek ” bölüminde Java dil spesifikasiýasyny açalyň :
Polimorfizm we onuň dostlary - 10
Netijede, usulyň goluny kesgitlemek üçin argumentleriň görnüşleri we sany (jemleniş wagtynda elýeterli) maglumatlary ulanylar. Bu usul obýektiň usullaryndan biri bolsa (meselem, mysal usuly), hakyky usul jaňy dinamiki usuly gözlemek (ýagny dinamiki baglanyşyk) arkaly iş wagty kesgitlener. Has düşnükli etmek üçin, ozal ara alnyp maslahatlaşylanlara meňzeş bir mysal alalyň:
public class HelloWorld {
    public void method(int intNumber) {
        System.out.println("intNumber");
    }
    public void method(Integer intNumber) {
        System.out.println("Integer");
    }
    public void method(String intNumber) {
        System.out.println("Number is: " + intNumber);
    }

    public static void main(String args[]) {
        HelloWorld test = new HelloWorld();
        test.method(2);
    }
}
Geliň, bu kody HelloWorld.java faýlyna ýazdyralyň we javac HelloWorld.java indi ulanyp düzeliň, geliň, buýrugy ýerine ýetirip, düzüjimiziň bytekodda näme ýazandygyny göreliň : javap -verbose HelloWorld.
Polimorfizm we onuň dostlary - 11
Bellenilişi ýaly, düzüji geljekde käbir wirtual usulyň çagyryljakdygyny kesgitledi. Bodyagny, usul bedeni iş wagty kesgitlener. Compöne jemlenende, üç usulyň hemmesinden düzüji iň amatly birini saýlady, şonuň üçin san görkezdi:"invokevirtual #13"
Polimorfizm we onuň dostlary - 12
Bu nähili usul? Bu usula baglanyşyk. Takyk aýtsak, bu iş wagtynda Java Wirtual Machine haýsy usuly ýerine ýetirmelidigini anyklap bilýän käbir maglumat. Has giňişleýin maglumaty super makalada tapyp bilersiňiz: " JVM içerde artykmaç ýüklemek we artykmaç usuly nädip ulanýar ".

Jemleme

Şeýlelik bilen, Java-yň obýekte gönükdirilen dil hökmünde polimorfizmi goldaýandygyny bildik. Polimorfizm statik (Statik baglanyşyk) ýa-da dinamiki (dinamiki baglanyşyk) bolup biler. Statik polimorfizm bilen, irki baglanyşyk diýlip hem bilinýän, düzüji haýsy usulyň we nirede çagyrylmalydygyny kesgitleýär. Bu artykmaç ýüklemek ýaly mehanizmi ulanmaga mümkinçilik berýär. Dinamiki polimorfizm bilen, giç baglanyşyk diýlip hem bilinýän, bir usulyň ozal hasaplanan goluna esaslanyp, haýsy obýektiň ulanylýandygyna (ýagny haýsy obýektiň usuly diýilýär) iş wagty hasaplanar. Bu mehanizmleriň işleýşini bytekod arkaly görmek bolýar. Artykmaç usul usulyň gollaryna seredýär we artykmaç ýük çözülende iň anyk (iň takyk) warianty saýlanýar. Artykmaç haýsy usullaryň bardygyny kesgitlemek üçin görnüşe seredýär we usullaryň özi obýektiň esasynda atlandyrylýar. Mundan başga-da mowzukdaky materiallar: # Wiaçeslaw
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION