рдЬреЗрд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рдмрд╣реБрд░реВрдкрддрд╛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ

рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред





рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╡рд┐рдзрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдмрдирд╛рдо рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ , рд╣рдордиреЗ рд╡рд┐рдзрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ рдирд┐рдпрдореЛрдВ рдФрд░ рдорддрднреЗрджреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЛ рдЬреЗрд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЗрдВ: рдореВрд▓ Mammal (рд╕реНрддрдирдкрд╛рдпреА) рдФрд░ рдмрдЪреНрдЪрд╛ Human (рдорд╛рдирд╡)ред

 public class OverridingInternalExample { private static class Mammal { public void speak() { System.out.println("ohlllalalalalalaoaoaoa"); } } private static class Human extends Mammal { @Override public void speak() { System.out.println("Hello"); } //   speak() public void speak(String language) { if (language.equals("Hindi")) System.out.println("Namaste"); else System.out.println("Hello"); } @Override public String toString() { return "Human Class"; } } //           public static void main(String[] args) { Mammal anyMammal = new Mammal(); anyMammal.speak(); // Output - ohlllalalalalalaoaoaoa // 10: invokevirtual #4 // Method org/programming/mitra/exercises/OverridingInternalExample$Mammal.speak:()V Mammal humanMammal = new Human(); humanMammal.speak(); // Output - Hello // 23: invokevirtual #4 // Method org/programming/mitra/exercises/OverridingInternalExample$Mammal.speak:()V Human human = new Human(); human.speak(); // Output - Hello // 36: invokevirtual #7 // Method org/programming/mitra/exercises/OverridingInternalExample$Human.speak:()V human.speak("Hindi"); // Output - Namaste // 42: invokevirtual #9 // Method org/programming/mitra/exercises/OverridingInternalExample$Human.speak:(Ljava/lang/String;)V } } 

рд╣рдо рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рдкреНрд░рд╢реНрди рдХреЛ рджреЛ рдкрдХреНрд╖реЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: "рддрд╛рд░реНрдХрд┐рдХ" рдФрд░ "рднреМрддрд┐рдХ" рд╕реЗред рдЖрдЗрдП рдкрд╣рд▓реЗ рдореБрджреНрджреЗ рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдкрдХреНрд╖ рдХреЛ рджреЗрдЦреЗрдВред

рддрд╛рд░реНрдХрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг


рддрд╛рд░реНрдХрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ, рд╕рдВрджрд░реНрднрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░рди рдЯрд╛рдЗрдо рдкрд░, рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рддрд░реАрдХрд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдореЗрдВ humanMammal.speak(); рд╕рдВрдХрд▓рдХ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Mammal.speak() рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ humanMammal Mammal рдХреЛ Mammal рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдордп рдХреЗ рд╕рд╛рде, JVM рдХреЛ рдкрддрд╛ рдЪрд▓ рдЬрд╛рдПрдЧрд╛ рдХрд┐ humanMammal рдореЗрдВ рдПрдХ Human рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ Human.speak() рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛ред

рдЬрдм рддрдХ рд╣рдо рдПрдХ рд╡реИрдЪрд╛рд░рд┐рдХ рд╕реНрддрд░ рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдм рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЬреЗрд╡реАрдПрдо рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИ? рдЬреЗрд╡реАрдПрдо рдХрд┐рд╕ рд╡рд┐рдзрд┐ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП?

рд╣рдо рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрддрд┐рднрд╛рд░рд┐рдд рддрд░реАрдХреЛрдВ рдХреЛ рдмрд╣реБрд░реВрдкрддрд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрднреА-рдХрднреА рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рд╕рдВрдХрд▓рди-рд╕рдордп рдмрд╣реБрд░реВрдкрддрд╛ рдпрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ / рд╕реНрдереИрддрд┐рдХ рдмрдВрдзрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ (рдУрд╡рд░рд░рд╛рдЗрдб) рд░рдирдЯрд╛рдЗрдо рдкрд░ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рддрд░реАрдХреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рджреЗрдЦрдиреЗ рдХрд╛ рднреМрддрд┐рдХ рдмрд┐рдВрджреБ


рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдХрдердиреЛрдВ рдХреЗ рд▓рд┐рдП "рднреМрддрд┐рдХ" рд╕рд╛рдХреНрд╖реНрдп рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, javap -verbose OverridingInternalExample рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рд╣рдо javap -verbose OverridingInternalExample рдХреЛ рдЪрд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред -verbose рдкреИрд░рд╛рдореАрдЯрд░ рд╣рдореЗрдВ рд╣рдорд╛рд░реЗ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЕрдиреБрд░реВрдк рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдмрд╛рдЗрдЯрдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрджреЗрд╢ рдореЗрдВ рдмрд╛рдЗрдЯрдХреЛрдб рдХреЗ рджреЛ рдЦрдВрдб рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред

1. рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдкреВрд▓ ред рдЗрд╕рдореЗрдВ рд▓рдЧрднрдЧ рд╡рд╣ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рд╕рдВрджрд░реНрдн ( #Methodref ), рдХрдХреНрд╖рд╛рдПрдВ ( #Class ), рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ ( #String )ред



2. рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдмрд╛рдпрдЯреЗрдХреЛрдбред рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдмрд╛рдпреЛрдЯреЗрдХ рдирд┐рд░реНрджреЗрд╢ред



рдХреНрдпреЛрдВ рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд░ рдХреЛ рд╕реНрдерд┐рд░ рдмрдВрдзрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ


рдЙрдкрд░реНрдпреБрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдВрдХрд▓рдХ рдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ humanMammal.speak() рд╡рд┐рдзрд┐ рдХреЛ Mammal рд╡рд░реНрдЧ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕реЗ Human рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ - рдпрд╣ Human рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджреНрджреЗрд╢реНрдп рд╣реЛрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдХреЛрдб рдФрд░ javap рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ bytecode рдХрд╛ рдЙрдкрдпреЛрдЧ humanMammal.speak() рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╡рд┐рдзрд┐ рдЕрдзрд┐рднрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ рдмрд╛рдпрдЯреЗрдХреЛрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рд╕рдВрдХрд▓рди рдкрддреЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЗрд╕реАрд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдЯреИрдЯрд┐рдХ рд▓рд┐рдВрдХреЗрдЬ рдпрд╛ рдХрдВрдкрд╛рдЗрд▓-рдЯрд╛рдЗрдо рдкреЙрд▓рд┐рдореЛрд░реНрдлрд┐рдЬреНрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХреНрдпреЛрдВ рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рдмрдВрдзрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ


anyMammal.speak() рдФрд░ humanMammal.speak() рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, anyMammal.speak() рд╕рдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ Mammal рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 invokevirtual #4 // Method org/programming/mitra/exercises/OverridingInternalExample$Mammal.speak:()V 

рддреЛ рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рджреЛрдиреЛрдВ рдХреЙрд▓ рдореЗрдВ рдПрдХ рд╣реА рдмрд╛рдпрдЯреЗрдХреЛрдб рд╣реИ, рддреЛ JVM рдХреЛ рдХреИрд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╣реА рдЫрд┐рдкрд╛ рд╣реИ рдФрд░ invokevirtual рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдореЗрдВред рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ (рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ рдХреЗ рдЕрдиреБрд╕рд╛рд░: рдЬреЗрд╡реАрдПрдо рдХрд▓реНрдкрдирд╛ 2.11.8 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ) :
Invokevirtual рдирд┐рд░реНрджреЗрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ (рд╡рд░реНрдЪреБрдЕрд▓) рдкреНрд░рдХрд╛рд░ рдкрд░ рдкреНрд░реЗрд╖рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реГрддреНрддрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реЗрд╖рдг рд╣реИред
JVM рдЬрд╛рд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ C ++ рдЖрднрд╛рд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рдЖрд╣реНрд╡рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП invokevirtual рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред C ++ рдореЗрдВ, рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХреЛ рдЖрднрд╛рд╕реА рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛ рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрднрд╛рд╕реА рд╣реИрдВ (рдЕрдВрддрд┐рдо рдФрд░ рд╕реНрдерд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░), рдЗрд╕рд▓рд┐рдП рдмрд╛рд▓ рд╡рд░реНрдЧ рдореЗрдВ рд╣рдо рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд┐ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

invokevirtual рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ (# 4 рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ)ред

 invokevirtual #4 // Method org/programming/mitra/exercises/OverridingInternalExample$Mammal.speak:()V 

рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн # 4 рдЖрдЧреЗ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдФрд░ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

 #4 = Methodref #2.#27 // org/programming/mitra/exercises/OverridingInternalExample$Mammal.speak:()V #2 = Class #25 // org/programming/mitra/exercises/OverridingInternalExample$Mammal #25 = Utf8 org/programming/mitra/exercises/OverridingInternalExample$Mammal #27 = NameAndType #35:#17 // speak:()V #35 = Utf8 speak #17 = Utf8 ()V 

рдЗрди рд╕рднреА рдХрдбрд╝рд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╡рд┐рдзрд┐ рдФрд░ рдЬрд┐рд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рд╕реНрдерд┐рдд рд╣реИ, рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ ( рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ: рдЬреЗрд╡реАрдПрдо рдХрд▓реНрдкрдирд╛ 2.7 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ) рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдУрд░реЗрдХрд▓ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рд▓рд┐рдВрдХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реЛрддреА рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ, рдФрд░ рджреВрд╕рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдПред рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдвреЗрд░ рдкрд░ рдбреЗрдЯрд╛ред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджрд░реНрдн рдЪрд░ рдореЗрдВ рджреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВ:

  1. рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЗ рдФрд░ Class рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [speak(), speak(String) Class object]
  2. рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдорд╛рди рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╣реАрдк рдкрд░ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ invokevirtual рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдХреЛрдИ рднреА рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм рдЬреЗрд╡реАрдПрдо рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬреЗрд╡реАрдПрдо рд╕реЗ рдЬреЗрд╡реАрдПрдо рддрдХ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред

рдЙрдкрд░реЛрдХреНрдд рддрд░реНрдХ рд╕реЗ, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ / рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдЬрд╛рд╡рд╛ рдиреЗ рдЗрд╕ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ C ++ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдерд╛ред рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдирд╛рдореЛрдВ рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдореЗрдердб рдЯреЗрдмрд▓ (VMT), рд╡рд░реНрдЪреБрдЕрд▓ рдлрдВрдХреНрд╢рди рдЯреЗрдмрд▓ (vftable), рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ (vtable), рдбрд┐рд╕реНрдкреИрдЪ рдЯреЗрдмрд▓ ред

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ JVM рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд░рдгрдиреАрддрд┐ рд╕реА ++ рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдПрдХ рд╕рд░рдгреА рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдирд╛рдо рдФрд░ рдЙрдирдХреЗ рд╕рдВрджрд░реНрдн рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЬрдм рднреА рдЬреЗрд╡реАрдПрдо рдПрдХ рдЖрднрд╛рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдкрдиреЗ рдкрддреЗ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рддрд╛рд▓рд┐рдХрд╛ рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ рдФрд░ рдХрдХреНрд╖рд╛ рдХреА рд╕рднреА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИ, рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИред рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдмрд╛рд╣рд░реА рдЬрд╛рд╡рд╛ рдХреНрд▓рд╛рд╕ рд╕реНрдерд┐рд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛ рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ-рдУрд░рд┐рдПрдВрдЯреЗрдб рднрд╛рд╖рд╛ рдпрд╛ рд╡реНрд╣рд╛рдИ рдиреЙрдЯ рдХреНрдпреЛрдВ рд╣реИ ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, Object рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА 11 рд╡рд┐рдзрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдпрджрд┐ registerNatives рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ) рдФрд░ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдЕрдиреБрд░реВрдк рд▓рд┐рдВрдХред



рдЬрдм рдЬреЗрд╡реАрдПрдо рдореЗрдореЛрд░рд▓ рдХреНрд▓рд╛рд╕ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ Class рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реЙрдпрдмреЗрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ Object рдХреНрд▓рд╛рд╕ рдХреЗ рд╕рднреА рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдорд╛рди рд╕рдВрджрд░реНрдн рд╣реЛрддреЗ рд╣реИрдВ (рдЪреВрдВрдХрд┐ Mammal Object рд╕реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ) рдФрд░ speak() рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИред



рдлрд┐рд░ Human рдХреНрд▓рд╛рд╕ рдХреА рдХреНрд▓рд╛рд╕ рдЖрддреА рд╣реИ рдФрд░ рдЬреЗрд╡реАрдПрдо, Mammal рдХреНрд▓рд╛рд╕ рдХреА рд╡рд╛рдЗрдмрд▓ рд╕реЗ рд▓реЗрдХрд░ Human рдХреНрд▓рд╛рд╕ рдХреА рд╡реЙрдпрдЯреЗрдмрд┐рд▓рд┐рдЯреА рддрдХ рдХреА рд╕рднреА рдПрдВрдЯреНрд░реАрдЬрд╝ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдФрд░ speak(String) рдХреЗ рдУрд╡рд░рд▓реЛрдб рд╡рд░реНрдЬрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рдПрдВрдЯреНрд░реА speak(String) рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдЬреЗрд╡реАрдПрдо рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ Human рд╡рд░реНрдЧ рдиреЗ рджреЛ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рд╣реИ: Object рд╕реЗ toString() рдФрд░ Mammal рд╕реЗ speak() ред рдЕрдм рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЕрджреНрдпрддрди рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдирдП рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЬреЗрд╡реАрдПрдо рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдВрдХ рдХреЛ рдореМрдЬреВрджрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдкрд╣рд▓реЗ рдореМрдЬреВрдж рдереЗ, рдФрд░ рдЙрд╕реА рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред



invokevirtual рдирд┐рд░реНрджреЗрд╢ JVM рдХреЛ рд╡рд┐рдзрд┐ # 4 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдорд╛рди рдХреЛ рдПрдХ рдкрддреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрддрдорд╛рди рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдореЗрдВ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рдХреЗ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВред
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬреЗрд╡реАрдПрдо рдирд┐рд░рдВрддрд░ рдкреВрд▓ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд┐рдзрд┐ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
рдЖрдк Github рднрдВрдбрд╛рд░ рдореЗрдВ рдирдореВрдирд╛ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Source: https://habr.com/ru/post/hi467197/


All Articles