рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдмрд╛рдЗрдирд░реА рд╕рдВрдЧрддрддрд╛ рдФрд░ рди рдХреЗрд╡рд▓

рд╢рд╛рдпрдж рдЖрдк рдореЗрдВ рд╕реЗ рдХрдИ рд▓реЛрдЧ рд╕рд╡рд╛рд▓ рдкреВрдЫ рд░рд╣реЗ рд╣реИрдВ рдЬреИрд╕реЗ, "рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?" рдкреНрд░рд╢реНрди рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдорд┐рд▓реЗрдВрдЧреЗред рдмреАрдЬ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП: рджреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдФрд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:

public interface A { //... } public interface B { //... } public class C implements A { //... } 

рдФрд░ рдпрд╣ рднреА рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдХрд┐ рдПрдХ foo рд╡рд┐рдзрд┐ A рдФрд░ B рд▓рд┐рдП рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реИ B рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрдХреНрд╖рд╛ C рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ C :

 public class CompatibilityChecker { public String foo(A a) { return "A"; } public String foo(B b) { return "B"; } public static void main(String[] args) { CompatibilityChecker checker = new CompatibilityChecker(); System.out.println(checker.foo(new C())); } } 

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ "рдП" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рднреА рдЙрддрдирд╛ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ C implements A, B рдХрд░рддрд╛ C implements A, B , рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ ( рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рддрд░реАрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдХ рдореЗрдВ рдЦрдВрдб 15.12.2 рдпрд╛ рдЕрдзрд┐рдХ рдореЗрдВред рдмрд╕ рд╕реНрдерд╛рдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди )ред
рд▓реЗрдХрд┐рди рддрдм рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдХреЗрд╡рд▓ C.java рдХреЛ рдлрд┐рд░ рд╕реЗ C.java рдФрд░ рдлрд┐рд░ рдореМрдЬреВрджрд╛ рдХреНрд▓рд╛рд╕ рдлрд╛рдЗрд▓ рд╕реЗ CompatibilityChecker рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ? рдореИрдВ рдХрдЯреМрддреА рдХреЗ рд▓рд┐рдП рдкреВрдЫрдирд╛!

рд╕реНрдереИрддрд┐рдХ рдкреНрд░реЗрд╖рдг

рдЬреЛ рд▓реЛрдЧ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдЕрдзрд┐рднрд╛рд░ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ рдХреНрд▓рд╛рд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рддреБрд░рдВрдд рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдХрд┐ рдХрд┐рд╕ рдкрджреНрдзрддрд┐ рд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП "рдП" рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛ред рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:

 public static void main(java.lang.String[]); Code: 0: new #4; //class CompatibilityChecker 3: dup 4: invokespecial #5; //Method "<init>":()V 7: astore_1 8: getstatic #6; //Field java/lang/System.out:Ljava/io/PrintStream; 11: aload_1 12: new #7; //class C 15: dup 16: invokespecial #8; //Method C."<init>":()V 19: invokevirtual #9; //Method foo:(LA;)Ljava/lang/String; 22: invokevirtual #10; //Method java/io/PrintStream.println:(Ljava/lang/String;)V 25: return 

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

рдЗрд╕рд▓рд┐рдП, рдЕрдкрдирд╛ рдХреЛрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдзрд╛рд░рдгрд╛ рд╕рд╣реА рдереА: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ "рдП" рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдЪреБрдЕрд▓ рдПрдбреНрд░реЗрд╕ рдЯреЗрдмрд▓ рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рдПрдбреНрд░реЗрд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ NoSuchMethodError рдореЗрдВ NoSuchMethodError рд╕рд╛рде рдЯреВрдЯ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдзрд╛рд░рдгрд╛ рднреА рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ foo(A) рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЖрднрд╛рд╕реА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╣реИред рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╡рд╛рд░рд┐рд╕ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣реЗ рдереЗ ...

рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЗрд╖рдг

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреАрди рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ:

 public class A { public String foo() { return "A"; } } public class B extends A { @Override public String foo() { return "B"; } } public class C extends A { @Override public String foo() { return super.foo() + "C"; } } 

рдФрд░ рд╡рд░реНрдЧ рдЬреЛ foo рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╣рддрд╛ рд╣реИ:

 public class CompatibilityChecker { public static void main(String[] args) { A a = new A(); A ab = new B(); B bb = new B(); A ac = new C(); C cc = new C(); System.out.println(a.foo()); System.out.println(ab.foo()); System.out.println(bb.foo()); System.out.println(ac.foo()); System.out.println(cc.foo()); } } 

рд╣рд░ рдХреЛрдИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдЪреБрдирд┐рдВрджрд╛ рддрд░реАрдХреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
 A B B AC AC 

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк A рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдХрд░ рдпрд╣ рдЪрд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ:

 public class A { public String foo(Object dummy) { return "A"; } } 

рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ foo рдХреЛ рдХрдХреНрд╖рд╛ A рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ NoSuchMethodError рд╕рд╛рде рдмрд╛рд╣рд░ рдЙрдбрд╝ рдЬрд╛рдПрдЧрд╛ред рдЗрди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рдмреАрдЪ рд╡рд░реНрдЧ C рдореЗрдВ super.foo() рдХреЛ рдХреЙрд▓ рднреА рд╣реИ C рджреВрд╕рд░реЗ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛, B.foo() рд╡рд┐рдзрд┐ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдЪрд▓реЛ рд░рдгрдиреАрддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ: рдлрд┐рд░ рд╕реЗ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдерд╛, рд╡реИрд╕реЗ рд╣реА A.foo ред рд▓реЗрдХрд┐рди рдЕрдм B рдФрд░ C рдХреЛ рдмрджрд▓ рджреЗрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ foo рд╡рд┐рдзрд┐ рдХреЗ рдкреБрдирд░реНрдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╣рдЯрд╛ рджреЗрдВ:

 public class B extends A {} public class C extends A {} 

рдЬрдм рдХреЛрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдбрд╛рдпрдиреЗрдорд┐рдХ рдкреНрд░реЗрд╖рдг A.foo рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдкрддрд╛ A.foo , рдФрд░ рдЗрд╕рд▓рд┐рдП рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреЗрд╡рд▓ "рдП" рдЕрдХреНрд╖рд░ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдкрд╡рд╛рдж рдХреА рдкреВрд░реНрдг рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рджреЗрдЦреЗрдВрдЧреЗред

рд╣рдо рдлрд┐рд░ рд╕реЗ B рдФрд░ C рдореЗрдВ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдХреЗ рдЕрдкрдирд╛ рд╢реЛрдз рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЗрд╖рдг рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓ рдореЗрдВ рд╕рднреА рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ рдФрд░ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджреЗрдЧрд╛ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рдм рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдЕрдиреБрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░

рдкрд╣рд▓реЗ рд╣рдордиреЗ рдХреЗрд╡рд▓ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЦреЗрддреЛрдВ рдХрд╛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдПрдХ рдЕрдВрддрд░ рдорд╛рди рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рд╣реИ:

 public class A { int answer; } public class B extends A {} 

рдФрд░, рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, рдПрдХ рд╡рд░реНрдЧ B рдЙрдкрднреЛрдХреНрддрд╛:

 public class CompatibilityChecker { public static void main(String[] args) { B b = new B(); b.answer = 42; } } 

рдЕрдм рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ B рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

 public class B extends A { String answer; } 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ CompatibilityChecker рд▓рд┐рдП рдХреМрди рд╕рд╛ рдмрд╛рдпрдЯреЗрдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 public static void main(java.lang.String[]); Code: 0: new #2; //class B 3: dup 4: invokespecial #3; //Method B."<init>":()V 7: astore_1 8: aload_1 9: bipush 42 11: putfield #4; //Field B.answer:I 14: return 

рдпрд╣ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ 11 рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдмреА рдХрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЬрдм рд╣рдо B рдлрд┐рд░ рд╕реЗ рдЬреЛрдбрд╝реЗрдВрдЧреЗ B рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИред рдЪреВрдВрдХрд┐ рдХреЗрд╡рд▓ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХрд╛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реЛрддрд╛ рд╣реИ, putfield рдХрд╛ рдСрдкрд░реЗрдВрдб рдареАрдХ рдЙрд╕реА рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж, рдХреЛрдб рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред

рдФрд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ?


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

рдорд░рд╣рдо рдореЗрдВ рдЙрдбрд╝рдирд╛

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

 public interface A {} public class B implements A {} public class CompatibilityChecker { public static void main(String[] args) { A b = new B(); } } 

рд╣рдо рджреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВрдЧреЗ: рдЗрдВрдЯрд░рдлрд╝реЗрд╕ A рдореЗрдВ foo рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдФрд░ CompatibilityChecker рдХреНрд▓рд╛рд╕ рдХреА main рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░реЗрдВ:

 public interface A { void foo(); } public class CompatibilityChecker { public static void main(String[] args) { A b = new B(); b.foo(); } } 

рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ AbstractMethodError: B.foo()V , рдЬреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЬрд╛рдиреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛ рдмрд╛рдЗрдЯрдХреЛрдб рдкреНрд░реЛрд╕реИрд╕рд┐рдВрдЧ рдХреЗ рдореВрд▓ рдореЗрдВ рд╣реИред рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдереЗ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдЕрдВрдд


рддреЛ, рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рдЬреЛ рд▓реЗрдЦ рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ("рдпрджрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЧрд▓рдд рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рд▓рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?") рд╣реИ: "рдФрд░ рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ? рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рди рдореЗрдВ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рд╕реЗ рдЕрд▓рдЧ рд╣реИред "

рд▓реЗрдЦ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдмрд╛рддреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐ рддрд░реАрдХреЛрдВ рдФрд░ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрд▓рд╛рд╕ рдмрджрд▓рдиреЗ рдЬреИрд╕реЗ рдЕрд╕рдВрдЧрдд рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде, NoSuchMethodError , NoClassDefFoundError рдпрд╛ NoSuchMethodError рдЬреИрд╕реА рдмреЗрд░рд╣рдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ NoClassDefFoundError рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрдзрди рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рд╡реИрд╕реЗ, рд╣рдмреНрд░рд╣рд╛рдм рдкрд░ рдореЗрд░реЗ рджреВрд╕рд░реЗ рдЬреАрд╡рди рдореЗрдВ рдпрд╣ рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рд╡рд┐рд╖рдп рд╣реИред рдореИрдВ рдпрд╣ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рдореИрдВ рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

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


All Articles