рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ
рд╡рд┐рдзрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдмрдирд╛рдо рд╡рд┐рдзрд┐ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ
рдмрд╛рд░реЗ рдореЗрдВ рд╕рдм рдХреБрдЫ , рд╣рдордиреЗ рд╡рд┐рдзрд┐ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЗ рдирд┐рдпрдореЛрдВ рдФрд░ рдорддрднреЗрджреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рдХреЛ рдЬреЗрд╡реАрдПрдо рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рдХрдХреНрд╖рд╛рдПрдВ рд▓реЗрдВ: рдореВрд▓
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"); }
рд╣рдо рдмрд╣реБрд░реВрдкрддрд╛ рдХреЗ рдкреНрд░рд╢реНрди рдХреЛ рджреЛ рдкрдХреНрд╖реЛрдВ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: "рддрд╛рд░реНрдХрд┐рдХ" рдФрд░ "рднреМрддрд┐рдХ" рд╕реЗред рдЖрдЗрдП рдкрд╣рд▓реЗ рдореБрджреНрджреЗ рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рдкрдХреНрд╖ рдХреЛ рджреЗрдЦреЗрдВред
рддрд╛рд░реНрдХрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг
рддрд╛рд░реНрдХрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ, рд╕рдВрджрд░реНрднрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рд╕рдВрджрд░реНрдн рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░рди рдЯрд╛рдЗрдо рдкрд░, рд╕рдВрджрд░реНрднрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рддрд░реАрдХрд╛ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдореЗрдВ
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
рд▓реЗрдХрд┐рди рд╕рдВрджрд░реНрдн # 4 рдЖрдЧреЗ рдПрдХ рдФрд░ рд╡рд┐рдзрд┐ рдФрд░ рд╡рд░реНрдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
#4 = Methodref #2.#27
рдЗрди рд╕рднреА рдХрдбрд╝рд┐рдпреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╡рд┐рдзрд┐ рдФрд░ рдЬрд┐рд╕ рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд╡рд┐рдзрд┐ рд╕реНрдерд┐рдд рд╣реИ, рдХрд╛ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЬреЗрд╡реАрдПрдо рд╡рд┐рдирд┐рд░реНрджреЗрд╢ (
рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдиреЛрдЯ: рдЬреЗрд╡реАрдПрдо рдХрд▓реНрдкрдирд╛ 2.7 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ ) рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рд╡рд╕реНрддреБрдУрдВ рдХреА рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рдУрд░реЗрдХрд▓ рджреНрд╡рд╛рд░рд╛ рдХреБрдЫ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рдПрдХ рд╕рдВрджрд░реНрдн рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрд╡рдпрдВ рд▓рд┐рдВрдХ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд╣реЛрддреА рд╣реИ: рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рдФрд░ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ, рдФрд░ рджреВрд╕рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдПред рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдвреЗрд░ рдкрд░ рдбреЗрдЯрд╛ред
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджрд░реНрдн рдЪрд░ рдореЗрдВ рджреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВ:
- рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рдЬрд┐рд╕рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддрд░реАрдХреЗ рдФрд░
Class
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [speak(), speak(String) Class object]
- рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝реАрд▓реНрдб рдорд╛рди рдЬреИрд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рд╣реАрдк рдкрд░ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХред
рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ: рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ
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 рднрдВрдбрд╛рд░ рдореЗрдВ рдирдореВрдирд╛ рдХреЛрдб рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред