CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдВрдЪреА рдЙрджрд╛рд╣рд░рдгреЗ
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдВрдЪреА рдЙрджрд╛рд╣рд░рдгреЗ

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп
рдХрджрд╛рдЪрд┐рдд рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдорд╛рдиреНрдп рдЬреАрд╡рдирд╛рдд "рдкреНрд░рддрд┐рдмрд┐рдВрдм" рд╣реА рд╕рдВрдХрд▓реНрдкрдирд╛ рдЖрд▓реА рдЕрд╕реЗрд▓. рд╣рд╛ рд╢рдмреНрдж рд╕рд╣рд╕рд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕ рд╕реВрдЪрд┐рдд рдХрд░рддреЛ. рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдордзреНрдпреЗ, рддреНрдпрд╛рдЪрд╛ рд╕рдорд╛рди рдЕрд░реНрде рдЖрд╣реЗ - рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд╛рд▓реВ рдЕрд╕рддрд╛рдирд╛, рдкреНрд░реЛрдЧреНрд░рд╛рдордмрджреНрджрд▓ рдбреЗрдЯрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреА рд░рдЪрдирд╛ рдЖрдгрд┐ рд╡рд░реНрддрди рдмрджрд▓рдгреНрдпрд╛рд╕рд╛рдареА рд╣реА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ - рез рдпреЗрдереЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рдХреА рдЖрдкрдг рд╣реЗ рд░рдирдЯрд╛рдЗрдорд╡рд░ рдХрд░рдд рдЖрд╣реЛрдд, рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА рдирд╛рд╣реА. рдкрдг рд░рдирдЯрд╛рдЗрдордЪреНрдпрд╛ рд╡реЗрд│реА рдХреЛрдбрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛? рд╢реЗрд╡рдЯреА, рдЖрдкрдг рдХреЛрдб рдЖрдзреАрдЪ рд╡рд╛рдЪреВ рд╢рдХрддрд╛ :/ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рддреНрд╡рд░рд┐рдд рд╕реНрдкрд╖реНрдЯ рди рд╣реЛрдгреНрдпрд╛рдЪреЗ рдПрдХ рдХрд╛рд░рдг рдЖрд╣реЗ: рдпрд╛ рдХреНрд╖рдгрд╛рдкрд░реНрдпрдВрдд, рдЖрдкрдг рдХреЛрдгрддреНрдпрд╛ рд╡рд░реНрдЧрд╛рдд рдХрд╛рдо рдХрд░рдд рдЖрд╣рд╛рдд рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрд╣рдореАрдЪ рдорд╛рд╣рд┐рдд рд╣реЛрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рддреБрдореНрд╣реА Catрд╡рд░реНрдЧ рд▓рд┐рд╣реВ рд╢рдХрддрд╛:
package learn.codegym;

public class Cat {

   private String name;
   private int age;

   public Cat(String name, int age) {
       this.name = name;
       this.age = age;
   }

   public void sayMeow() {

       System.out.println("Meow!");
   }

   public void jump() {

       System.out.println("Jump!");
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

@Override
public String toString() {
   return "Cat{" +
           "name='" + name + '\'' +
           ", age=" + age +
           '}';
}

}
рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдмрджреНрджрд▓ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдЖрдгрд┐ рддреБрдореНрд╣реА рддреНрдпрд╛рдд рдЕрд╕рд▓реЗрд▓реА рдлреАрд▓реНрдб рдЖрдгрд┐ рдкрджреНрдзрддреА рдкрд╛рд╣реВ рд╢рдХрддрд╛. рд╕рдордЬрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдЪрд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдд рдЗрддрд░ рдкреНрд░рд╛рдгреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдЪреА рдУрд│рдЦ рдХрд░реВрди рджреЗрдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдЖрд╣реЗ. AnimalрддреБрдореНрд╣реА рдХрджрд╛рдЪрд┐рдд рд╕реЛрдпреАрд╕рд╛рдареА рдкрд╛рд▓рдХ рд╡рд░реНрдЧрд╛рд╕рд╣ рд╡рд░реНрдЧ рд╡рд╛рд░рд╕рд╛ рд░рдЪрдирд╛ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ . рдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдкрд╢реБрд╡реИрджреНрдпрдХреАрдп рджрд╡рд╛рдЦрд╛рдиреНрдпрд╛рдЪреЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдгрд╛рд░рд╛ рдПрдХ рд╡рд░реНрдЧ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рд╣реЛрддрд╛, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдПрдЦрд╛рджреА Animalрд╡рд╕реНрддреВ (рдкрд╛рд▓рдХ рд╡рд░реНрдЧрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг) рдкрд╛рд╕ рдХрд░реВ рд╢рдХрддреЛ, рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреБрддреНрд░рд╛ рдХрд┐рдВрд╡рд╛ рдорд╛рдВрдЬрд░ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдкреНрд░рд╛рдгреНрдпрд╛рд▓рд╛ рдпреЛрдЧреНрдп рд╡рд╛рдЧрдгреВрдХ рджреЗрддреЛ. рдЬрд░реА рд╣реА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рдХрд╛рд░реНрдпреЗ рдирд╕рд▓реА рддрд░реАрд╣реА, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕рдВрдХрд▓рд┐рдд рд╡реЗрд│реА рд╡рд░реНрдЧрд╛рдВрдмрджреНрджрд▓ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреА рд╢рд┐рдХрдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗ. рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг Catрдкрд╢реБрд╡реИрджреНрдпрдХреАрдп рдХреНрд▓рд┐рдирд┐рдХ рдХреНрд▓рд╛рд╕рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдВрд╡рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕ рдХрд░рддрд╛main()рдкрджреНрдзрдд, рдкреНрд░реЛрдЧреНрд░рд╛рдорд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ рдХреА рддреА рдПрдХ рдорд╛рдВрдЬрд░ рдЖрд╣реЗ, рдХреБрддреНрд░рд╛ рдирд╛рд╣реА. рдЖрддрд╛ рдХрд▓реНрдкрдирд╛ рдХрд░реВрдпрд╛ рдХреА рдЖрдкрдг рдПрдХрд╛ рд╡реЗрдЧрд│реНрдпрд╛ рдХрд╛рд░реНрдпрд╛рд▓рд╛ рд╕рд╛рдореЛрд░реЗ рдЬрд╛рдд рдЖрд╣реЛрдд. рдЖрдордЪреЗ рдзреНрдпреЗрдп рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд┐рд╣рд┐рдгреЗ рдЖрд╣реЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ CodeAnalyzerрдПрдХрд╛рдЪ рдкрджреНрдзрддреАрд╕рд╣ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ: void analyzeObject(Object o). рд╣реА рдкрджреНрдзрдд рдЕрд╕рд╛рд╡реА:
  • рддреНрдпрд╛рд╡рд░ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рдХрдиреНрд╕реЛрд▓рд╡рд░ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛;
  • рдЦрд╛рдЬрдЧреА рдХреНрд╖реЗрддреНрд░рд╛рдВрд╕рд╣ рдЙрддреНрддреАрд░реНрдг рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдлреАрд▓реНрдбрдЪреА рдирд╛рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рддреА рдХрдиреНрд╕реЛрд▓рд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛;
  • рдЙрддреНрддреАрд░реНрдг рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рд╕рд░реНрд╡ рдкрджреНрдзрддреАрдВрдЪреА рдирд╛рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рд╛, рдЬреНрдпрд╛рдд рдЦрд╛рдЬрдЧреА рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ рдЖрдгрд┐ рддреА рдХрдиреНрд╕реЛрд▓рд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рд╛.
рд╣реЗ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:
public class CodeAnalyzer {

   public static void analyzeClass(Object o) {

       // Print the name of the class of object o
       // Print the names of all variables of this class
       // Print the names of all methods of this class
   }

}
рдЖрддрд╛ рд╣реЗ рдХрд╛рд░реНрдп рддреБрдореНрд╣реА рдкреВрд░реНрд╡реА рд╕реЛрдбрд╡рд▓реЗрд▓реНрдпрд╛ рдЗрддрд░ рдХрд╛рд░реНрдпрд╛рдВрдкреЗрдХреНрд╖рд╛ рдХрд╕реЗ рд╡реЗрдЧрд│реЗ рдЖрд╣реЗ рд╣реЗ рдЖрдореНрд╣реА рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдкрд╛рд╣реВ рд╢рдХрддреЛ. рдЖрдордЪреНрдпрд╛ рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджрд┐рд╖реНрдЯрд╛рд╕рд╣, рдЕрдбрдЪрдг рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдд рдЖрд╣реЗ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд┐рдВрд╡рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рд▓рд╛ рдирдХреНрдХреА рдХрд╛рдп рдкрд╛рд╕ рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рд╣реЗ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА.analyzeClass()рдкрджреНрдзрдд рддреБрдореНрд╣реА рдЕрд╕рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рд╣рд┐рд▓реНрдпрд╛рд╕, рдЗрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рддреЗ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХрд░рддреАрд▓, рдЖрдгрд┐ рддреЗ рдпрд╛ рдкрджреНрдзрддреАрдд рдХрд╛рд╣реАрд╣реА рдкрд╛рд╕ рдХрд░реВ рд╢рдХрддреАрд▓ тАФ рдХреЛрдгрддрд╛рд╣реА рдорд╛рдирдХ Java рд╡рд░реНрдЧ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХреЛрдгрддрд╛рд╣реА рд╡рд░реНрдЧ рддреЗ рд▓рд┐рд╣рд┐рддрд╛рдд. рдЙрддреНрддреАрд░реНрдг рд╡рд░реНрдЧрд╛рдд рдХрд┐рддреАрд╣реА рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЖрдгрд┐ рдкрджреНрдзрддреА рдЕрд╕реВ рд╢рдХрддрд╛рдд. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдЖрдореНрд╣рд╛рд▓рд╛ (рдЖрдгрд┐ рдЖрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рд▓рд╛) рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛ рд╡рд░реНрдЧрд╛рдд рдХрд╛рдо рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд рдпрд╛рдЪреА рдХрд▓реНрдкрдирд╛ рдирд╛рд╣реА. рдкрд░рдВрддреБ рддрд░реАрд╣реА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╣реЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдгрд┐ рдЗрдереЗрдЪ рдорд╛рдирдХ Java Reflection API рдЖрдордЪреНрдпрд╛ рдорджрддреАрд▓рд╛ рдпреЗрддреЗ. рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди API рд╣реЗ рднрд╛рд╖реЗрдЪреЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд╛рдзрди рдЖрд╣реЗ. рдУрд░реЕрдХрд▓рдЪреЗ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЗ рдХреА рд╣реА рдпрдВрддреНрд░рдгрд╛ рдХреЗрд╡рд│ рдЕрдиреБрднрд╡реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рд▓реА рдЬрд╛рд╡реА рдЬреНрдпрд╛рдВрдирд╛ рддреЗ рдХрд╛рдп рдХрд░рдд рдЖрд╣реЗрдд рд╣реЗ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░рдЪреА рдЪреЗрддрд╛рд╡рдгреА рдЖрдЧрд╛рдК рдХрд╛ рджреЗрдд рдЖрд╣реЛрдд рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд▓рд╡рдХрд░рдЪ рд╕рдордЬреЗрд▓ :) рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди API рд╕рд╣ рддреБрдореНрд╣реА рдХрд░реВ рд╢рдХрддрд╛ рдЕрд╢рд╛ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдпрд╛рджреА рдпреЗрдереЗ рдЖрд╣реЗ:
  1. рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдУрд│рдЦрд╛/рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рд╛.
  2. рд╡рд░реНрдЧ рд╕реБрдзрд╛рд░рдХ, рдлреАрд▓реНрдб, рдкрджреНрдзрддреА, рд╕реНрдерд┐рд░рд╛рдВрдХ, рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрдгрд┐ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд╛.
  3. рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реНрдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдкрджреНрдзрддреА рдЖрд╣реЗрдд рддреЗ рд╢реЛрдзрд╛.
  4. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЬреНрдпрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА рдЕрд╢рд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рд╛.
  5. рдирд╛рд╡рд╛рдиреЗ рдЙрджрд╛рд╣рд░рдг рдлреАрд▓реНрдбрдЪреЗ рдореВрд▓реНрдп рдорд┐рд│рд╡рд╛ рдЖрдгрд┐ рд╕реЗрдЯ рдХрд░рд╛.
  6. рдирд╛рд╡рд╛рдиреЗ рдЙрджрд╛рд╣рд░рдг рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рд╛.
рдкреНрд░рднрд╛рд╡реА рдпрд╛рджреА, рд╣рдВ? :) рдЯреАрдк:рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдо рд╣реА рд╕рд░реНрд╡ рд╕рд╛рдордЧреНрд░реА "рдорд╛рд╢реАрд╡рд░" рдХрд░реВ рд╢рдХрддреЗ, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдХрдбреЗ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреА рд╡рд╕реНрддреВ рдкрд╛рд╕ рдХрд░рддреЛ рдпрд╛рдЪреА рдкрд░реНрд╡рд╛ рди рдХрд░рддрд╛! рдЪрд▓рд╛ рдХрд╛рд╣реА рдЙрджрд╛рд╣рд░рдгреЗ рдмрдШреВрди рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди API рдЪреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪрд╛ рд╢реЛрдз рдШреЗрдК.

рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдХрд╕рд╛ рдУрд│рдЦрд╛рдпрдЪрд╛/рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛

рдЪрд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреАрдВрд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛. рдЬрд╛рд╡рд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдЗрдВрдЬрд┐рдирдЪрд╛ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рд╣рд╛ Classрд╡рд░реНрдЧ рдЖрд╣реЗ. рд╣реЛрдп, рд╣реЗ рдЦрд░реЛрдЦрд░ рдордЬреЗрджрд╛рд░ рджрд┐рд╕рддреЗ, рдкрд░рдВрддреБ рд╣реЗрдЪ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЖрд╣реЗ :) Classрд╡рд░реНрдЧ рд╡рд╛рдкрд░реВрди, рдЖрдореНрд╣реА рдкреНрд░рдердо рдЖрдордЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЛ. рдЪрд▓рд╛ рд╣реЗ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛:
import learn.codegym.Cat;

public class CodeAnalyzer {

   public static void analyzeClass(Object o) {
       Class clazz = o.getClass();
       System.out.println(clazz);
   }

   public static void main(String[] args) {

       analyzeClass(new Cat("Fluffy", 6));
   }
}
рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ:
class learn.codegym.Cat
рджреЛрди рдЧреЛрд╖реНрдЯреАрдВрдХрдбреЗ рд▓рдХреНрд╖ рджреНрдпрд╛. рдкреНрд░рдердо, рдЖрдореНрд╣реА рдЬрд╛рдгреВрдирдмреБрдЬреВрди Catрд╡рд░реНрдЧ рд╡реЗрдЧрд│реНрдпрд╛ рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдареЗрд╡рддреЛ learn.codegym. рдЖрддрд╛ рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛ рдХреА getClass()рдкрджреНрдзрдд рд╡рд░реНрдЧрд╛рдЪреЗ рдкреВрд░реНрдг рдирд╛рд╡ рджреЗрддреЗ. рджреБрд╕рд░реЗ, рдЖрдореНрд╣реА рдЖрдордЪреНрдпрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рд▓рд╛ рдирд╛рд╡ рджрд┐рд▓реЗ clazz. рддреЗ рдереЛрдбреЗ рд╡рд┐рдЪрд┐рддреНрд░ рджрд┐рд╕рддреЗ. рддреНрдпрд╛рд▓рд╛ "рд╡рд░реНрдЧ" рдореНрд╣рдгрдгреНрдпрд╛рдд рдЕрд░реНрде рдЖрд╣реЗ, рдкрд░рдВрддреБ "рд╡рд░реНрдЧ" рд╣рд╛ рдЬрд╛рд╡рд╛рдордзреНрдпреЗ рд░рд╛рдЦреАрд╡ рд╢рдмреНрдж рдЖрд╣реЗ. рдХрдВрдкрд╛рдЗрд▓рд░ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдирд╛ рдЕрд╕реЗ рдореНрд╣рдгреВ рджреЗрдгрд╛рд░ рдирд╛рд╣реА. рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ рдХрд╕реЗ рддрд░реА рдорд┐рд│рд╡рд╛рдпрдЪреЗ рд╣реЛрддреЗ :) рд╕реБрд░реБрд╡рд╛рддреАрд╕рд╛рдареА рд╡рд╛рдИрдЯ рдирд╛рд╣реА! рддреНрдпрд╛ рдХреНрд╖рдорддрд╛рдВрдЪреНрдпрд╛ рдпрд╛рджреАрдд рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЖрдгрдЦреА рдХрд╛рдп рд╣реЛрддреЗ?

рд╡рд░реНрдЧ рд╕реБрдзрд╛рд░рдХ, рдлреАрд▓реНрдб, рдкрджреНрдзрддреА, рд╕реНрдерд┐рд░рд╛рдВрдХ, рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрдгрд┐ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдпрд╛рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА.

рдЖрддрд╛ рдЧреЛрд╖реНрдЯреА рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рд╣реЛрдд рдЖрд╣реЗрдд! рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд╡рд░реНрдЧрд╛рдд, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХреЛрдгрддреЗрд╣реА рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд┐рдВрд╡рд╛ рдкрд╛рд▓рдХ рд╡рд░реНрдЧ рдирд╛рд╣реА. рдкреВрд░реНрдг рдЪрд┐рддреНрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдирд╛ рдЬреЛрдбреВрдпрд╛. рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ Animalрдкрд╛рд▓рдХ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рд╛:
package learn.codegym;
public class Animal {

   private String name;
   private int age;
}
CatрдЖрдгрд┐ рдЖрдореНрд╣реА рдЖрдордЪрд╛ рд╡рд░реНрдЧ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реВ AnimalрдЖрдгрд┐ рдПрдХ рд╕реНрдерд┐рд░рд╛рдВрдХ рдЬреЛрдбреВ:
package learn.codegym;

public class Cat extends Animal {

   private static final String ANIMAL_FAMILY = "Feline family";

   private String name;
   private int age;

   // ...the rest of the class
}
рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╕рдВрдкреВрд░реНрдг рдЪрд┐рддреНрд░ рдЖрд╣реЗ! рдЪрд▓рд╛ рдХрд╛рдп рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕рдХреНрд╖рдо рдЖрд╣реЗ рддреЗ рдкрд╛рд╣реВрдпрд╛ :)
import learn.codegym.Cat;

import java.util.Arrays;

public class CodeAnalyzer {

   public static void analyzeClass(Object o) {
       Class clazz = o.getClass();
       System.out.println("Class name: " + clazz);
       System.out.println("Class fields: " + Arrays.toString(clazz.getDeclaredFields()));
       System.out.println("Parent class: " + clazz.getSuperclass());
       System.out.println("Class methods: " + Arrays.toString(clazz.getDeclaredMethods()));
       System.out.println("Class constructors: " + Arrays.toString(clazz.getConstructors()));
   }

   public static void main(String[] args) {

       analyzeClass(new Cat("Fluffy", 6));
   }
}
рдЖрдореНрд╣реА рдХрдиреНрд╕реЛрд▓рд╡рд░ рдХрд╛рдп рдкрд╛рд╣рддреЛ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ:
Class name:  class learn.codegym.Cat
Class fields: [private static final java.lang.String learn.codegym.Cat.ANIMAL_FAMILY, private java.lang.String learn.codegym.Cat.name, private int learn.codegym.Cat.age]
Parent class: class learn.codegym.Animal
Class methods: [public java.lang.String learn.codegym.Cat.getName(), public void learn.codegym.Cat.setName(java.lang.String), public void learn.codegym.Cat.sayMeow(), public void learn.codegym.Cat.setAge(int), public void learn.codegym.Cat.jump(), public int learn.codegym.Cat.getAge()]
Class constructors: [public learn.codegym.Cat(java.lang.String, int)]
рдЖрдореНрд╣реА рдорд┐рд│рд╡реВ рд╢рдХрд▓реЛ рддреА рд╕рд░реНрд╡ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдЧ рдорд╛рд╣рд┐рддреА рдкрд╣рд╛! рдЖрдгрд┐ рдХреЗрд╡рд│ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдорд╛рд╣рд┐рддреАрдЪ рдирд╛рд╣реА рддрд░ рдЦрд╛рдЬрдЧреА рдорд╛рд╣рд┐рддреА рджреЗрдЦреАрд▓! рдЯреАрдк: privateрд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рджреЗрдЦреАрд▓ рд╕реВрдЪреАрдордзреНрдпреЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╡рд░реНрдЧрд╛рдЪреЗ рдЖрдордЪреЗ "рд╡рд┐рд╢реНрд▓реЗрд╖рдг" рдореВрд▓рдд: рдкреВрд░реНрдг рдорд╛рдирд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ: рдЖрдореНрд╣реА analyzeObject()рд╕рд░реНрд╡рдХрд╛рд╣реА рд╢рд┐рдХрдгреНрдпрд╛рд╕рд╛рдареА рдкрджреНрдзрдд рд╡рд╛рдкрд░рдд рдЖрд╣реЛрдд. рдкрд░рдВрддреБ рд╣реЗ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдЖрдкрдг рдкреНрд░рддрд┐рдмрд┐рдВрдмрд╛рдиреЗ рдХрд░реВ рд╢рдХрддреЛ рдЕрд╕реЗ рдирд╛рд╣реА. рдЖрдореНрд╣реА рд╕рд╛рдзреНрдпрд╛ рдирд┐рд░реАрдХреНрд╖рдгрд╛рдкреБрд░рддреЗ рдорд░реНрдпрд╛рджрд┐рдд рдирд╛рд╣реА тАФ рдЖрдореНрд╣реА рдХреГрддреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдвреЗ рдЬрд╛рдК! :)

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЬреНрдпрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА рдЕрд╢рд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ.

рдЪрд▓рд╛ рдбреАрдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛. рдЖрдордЪреНрдпрд╛ Catрд╡рд░реНрдЧрд╛рдд рдЕрдЬреВрди рдПрдХ рдирд╛рд╣реА, рдЪрд▓рд╛ рддреЗ рдЬреЛрдбреВрдпрд╛:
public Cat() {

}
CatрдкреНрд░рддрд┐рдмрд┐рдВрдм ( createCat()рдкрджреНрдзрдд) рд╡рд╛рдкрд░реВрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣рд╛ рдХреЛрдб рдЖрд╣реЗ :
import learn.codegym.Cat;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

   public static Cat createCat() throws IOException, IllegalAccessException, InstantiationException, ClassNotFoundException {

       BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       String className = reader.readLine();

       Class clazz = Class.forName(className);
       Cat cat = (Cat) clazz.newInstance();

       return cat;
   }

public static Object createObject() throws Exception {

   BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
   String className = reader.readLine();

   Class clazz = Class.forName(className);
   Object result = clazz.newInstance();

   return result;
}

   public static void main(String[] args) throws IOException, IllegalAccessException, ClassNotFoundException, InstantiationException {
       System.out.println(createCat());
   }
}
рдХрдиреНрд╕реЛрд▓ рдЗрдирдкреБрдЯ:
learn.codegym.Cat
рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ:
Cat{name='null', age=0}
рд╣реА рддреНрд░реБрдЯреА рдирд╛рд╣реА: рдЪреА рдореВрд▓реНрдпреЗ nameрдЖрдгрд┐ ageрдХрдиреНрд╕реЛрд▓рд╡рд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреЗрд▓реА рдЬрд╛рддрд╛рдд рдХрд╛рд░рдг рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ toString()рд╡рд░реНрдЧрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреАрдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдб рд▓рд┐рд╣рд┐рд▓рд╛ рдЖрд╣реЗ Cat. рдпреЗрдереЗ рдЖрдкрдг рдПрдХрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рд╡рд╛рдЪрддреЛ рдЬреНрдпрд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдг рдХрдиреНрд╕реЛрд▓рдордзреВрди рддрдпрд╛рд░ рдХрд░реВ. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреНрдпрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдУрд│рдЦрддреЛ. рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ - 3рд╕рдВрдХреНрд╖рд┐рдкреНрддрддреЗрд╕рд╛рдареА, рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреА рдХреЛрдб рд╡рдЧрд│рд▓рд╛, рдЬреЛ рдЙрджрд╛рд╣рд░рдгрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЬрд╛рдЧрд╛ рдШреЗрдИрд▓. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ, рдЕрд░реНрдерд╛рддрдЪ, рддреБрдореНрд╣реА рдЪреБрдХреАрдЪреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реА рдирд╛рд╡реЗ рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рд╣рд╛рддрд╛рд│рд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд. рдбреАрдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛, рд╡рд░реНрдЧрд╛рдЪрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ :) рдкрджреНрдзрдд newInstance()рд╡рд╛рдкрд░рдгреЗ , рдЖрдореНрд╣реА рдпрд╛ рд╡рд░реНрдЧрд╛рдЪрд╛ рдПрдХ рдирд╡реАрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рддреЛ. рд╣реА рджреБрд╕рд░реА рдмрд╛рдм рдЖрд╣реЗ рдЬрд░CatрдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрд░реНрдЧреНрдпреБрдореЗрдВрдЯреНрд╕ рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рдШреЗрддреЛ. рдЪрд▓рд╛ рдХреНрд▓рд╛рд╕рдЪрд╛ рдбрд┐рдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛рдвреВрди рдЯрд╛рдХреВ рдЖрдгрд┐ рдЖрдордЪрд╛ рдХреЛрдб рдкреБрдиреНрд╣рд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.
null
java.lang.InstantiationException: learn.codegym.Cat
at java.lang.Class.newInstance(Class.java:427)
рдХрд╛рд╣реАрддрд░реА рдЪреВрдХ рдЭрд╛рд▓реА! рдЖрдореНрд╣рд╛рд▓рд╛ рддреНрд░реБрдЯреА рдЖрд▓реА рдХрд╛рд░рдг рдЖрдореНрд╣реА рдбрд┐рдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд╛рдкрд░реВрди рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрджреНрдзрдд рдХреЙрд▓ рдХреЗрд▓реА. рдкрдг рдЖрддрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдЕрд╕рд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдирд╛рд╣реА. рдореНрд╣рдгреВрди рдЬреЗрд╡реНрд╣рд╛ newInstance()рдкрджреНрдзрдд рдЪрд╛рд▓рддреЗ, рддреЗрд╡реНрд╣рд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдпрдВрддреНрд░рдгрд╛ рджреЛрди рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдЖрдордЪреЗ рдЬреБрдиреЗ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╡рд╛рдкрд░рддреЗ:
public Cat(String name, int age) {
   this.name = name;
   this.age = age;
}
рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╕рд╣ рдХрд╛рд╣реАрд╣реА рдХреЗрд▓реЗ рдирд╛рд╣реА, рдЬрдгреВ рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдЪреНрдпрд╛рдмрджреНрджрд▓ рдкреВрд░реНрдгрдкрдгреЗ рд╡рд┐рд╕рд░рд▓реЛ рдЖрд╣реЛрдд! рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рд▓рд╛ рдпреБрдХреНрддрд┐рд╡рд╛рдж рдкрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕рд╛рдареА рдереЛрдбреА "рд╕рд░реНрдЬрдирд╢реАрд▓рддрд╛" рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
import learn.codegym.Cat;

import java.lang.reflect.InvocationTargetException;

public class Main {

   public static Cat createCat()  {

       Class clazz = null;
       Cat cat = null;

       try {
           clazz = Class.forName("learn.codegym.Cat");
           Class[] catClassParams = {String.class, int.class};
           cat = (Cat) clazz.getConstructor(catClassParams).newInstance("Fluffy", 6);
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       } catch (InstantiationException e) {
           e.printStackTrace();
       } catch (IllegalAccessException e) {
           e.printStackTrace();
       } catch (NoSuchMethodException e) {
           e.printStackTrace();
       } catch (InvocationTargetException e) {
           e.printStackTrace();
       }

       return cat;
   }

   public static void main(String[] args) {
       System.out.println(createCat());
   }
}
рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ:
Cat{name='Fluffy', age=6}
рдЖрдордЪреНрдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╛рдд рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рддреЗ рдЬрд╡рд│реВрди рдкрд╛рд╣реВ. рдЖрдореНрд╣реА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рдЪреА рдЕреЕрд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реА Class.
Class[] catClassParams = {String.class, int.class};
рддреЗ рдЖрдордЪреНрдпрд╛ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдЪреНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд (рдЬреНрдпрд╛рдордзреНрдпреЗ рдлрдХреНрдд StringрдЖрдгрд┐ intрдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╣реЗрдд). рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдкрджреНрдзрддреАрдордзреНрдпреЗ рдкрд╛рд╕ рдХрд░рддреЛ clazz.getConstructor()рдЖрдгрд┐ рдЗрдЪреНрдЫрд┐рдд рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдорд┐рд│рд╡рддреЛ. рддреНрдпрд╛рдирдВрддрд░, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд newInstance()рдЖрд╡рд╢реНрдпрдХ рдпреБрдХреНрддрд┐рд╡рд╛рджрд╛рдВрд╕рд╣ рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдЖрдгрд┐ рдЗрдЪреНрдЫрд┐рдд рдкреНрд░рдХрд╛рд░рд╛рдд рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдкрд╖реНрдЯрдкрдгреЗ рдХрд╛рд╕реНрдЯ рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛: Cat.
cat = (Cat) clazz.getConstructor(catClassParams).newInstance("Fluffy", 6);
рдЖрддрд╛ рдЖрдордЪрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рддрдпрд╛рд░ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ! рдХрдиреНрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ:
Cat{name='Fluffy', age=6}
рдмрд░реЛрдмрд░ рдкреБрдвреЗ рдЬрд╛рдд рдЖрд╣реЗ :)

рдирд╛рд╡рд╛рдиреБрд╕рд╛рд░ рдЙрджрд╛рд╣рд░рдг рдлреАрд▓реНрдбрдЪреЗ рдореВрд▓реНрдп рдХрд╕реЗ рдорд┐рд│рд╡рд╛рдпрдЪреЗ рдЖрдгрд┐ рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреЗ.

рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рддреБрдореНрд╣реА рджреБрд╕рд▒реНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдиреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рд╡рд░реНрдЧ рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддреБрдордЪреНрдпрд╛рдХрдбреЗ рддреЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдирд╛рд╣реА. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, JAR рдордзреНрдпреЗ рдкреЕрдХ рдХреЗрд▓реЗрд▓реА рд░реЗрдбреАрдореЗрдб рдХреНрд▓рд╛рд╕ рд▓рд╛рдпрдмреНрд░рд░реА. рддреБрдореНрд╣реА рд╡рд░реНрдЧрд╛рдВрдЪрд╛ рдХреЛрдб рд╡рд╛рдЪреВ рд╢рдХрддрд╛, рдкрдг рддреБрдореНрд╣реА рддреЛ рдмрджрд▓реВ рд╢рдХрдд рдирд╛рд╣реА. рд╕рдордЬрд╛ рдХреА рдЬреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░рдиреЗ рдпрд╛ рд▓рд╛рдпрдмреНрд░рд░реАрддреАрд▓ рд╡рд░реНрдЧрд╛рдВрдкреИрдХреА рдПрдХ рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХреЗрд▓рд╛ (рддреЛ рдЖрдордЪрд╛ рдЬреБрдирд╛ рд╡рд░реНрдЧ рдЕрд╕реВ рджреНрдпрд╛ Cat), рдбрд┐рдЭрд╛рдЗрди рдЕрдВрддрд┐рдо рд╣реЛрдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрджрд▓реНрдпрд╛ рд░рд╛рддреНрд░реА рдкреБрд░реЗрд╢реА рдЭреЛрдк рди рдорд┐рд│рд╛рд▓реНрдпрд╛рдиреЗ, рдлреАрд▓реНрдбрд╕рд╛рдареА рдЧреЗрдЯрд░ рдЖрдгрд┐ рд╕реЗрдЯрд░ рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ age. рдЖрддрд╛ рд╣рд╛ рд╡рд░реНрдЧ рддреБрдордЪреНрдпрд╛рдХрдбреЗ рдЖрд▓рд╛ рдЖрд╣реЗ. рд╣реЗ рддреБрдордЪреНрдпрд╛ рд╕рд░реНрд╡ рдЧрд░рдЬрд╛ рдкреВрд░реНрдг рдХрд░рддреЗ, рдХрд╛рд░рдг рддреБрдореНрд╣рд╛рд▓рд╛ CatрддреБрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рдлрдХреНрдд рд╡рд╕реНрддреВрдВрдЪреА рдЧрд░рдЬ рдЖрд╣реЗ. рдкрдг рддреБрдордЪреНрдпрд╛рдХрдбреЗ ageрдлреАрд▓реНрдб рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ! рд╣реА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдЖрд╣реЗ: рдЖрдореНрд╣реА рдлреАрд▓реНрдбрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рддреНрдпрд╛рдд рдЖрд╣реЗprivateрдореЙрдбрд┐рдлрд╛рдпрд░, рдЖрдгрд┐ рдЧреЗрдЯрд░ рдЖрдгрд┐ рд╕реЗрдЯрд░ рдХреНрд▓рд╛рд╕ рддрдпрд╛рд░ рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдЭреЛрдкреЗрдкрд╛рд╕реВрди рд╡рдВрдЪрд┐рдд рд╡рд┐рдХрд╛рд╕рдХрд╛рдиреЗ рд╣рдЯрд╡рд▓реЗ рд╣реЛрддреЗ :/ рдмрд░рдВ, рдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдкреНрд░рддрд┐рдмрд┐рдВрдм рдЖрдореНрд╣рд╛рд▓рд╛ рдорджрдд рдХрд░реВ рд╢рдХрддреЗ! рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡рд░реНрдЧрд╛рд╕рд╛рдареА рдХреЛрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЖрд╣реЗ Cat, рддреНрдпрд╛рдореБрд│реЗ рдЖрдореНрд╣реА рдХрд┐рдорд╛рди рд╢реЛрдзреВ рд╢рдХрддреЛ рдХреА рддреНрдпрд╛рдд рдХреЛрдгрддреА рдлреАрд▓реНрдб рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдХрд╛рдп рдореНрд╣рдгрддрд╛рдд. рдпрд╛ рдорд╛рд╣рд┐рддреАрд╕рд╣ рд╕рд╢рд╕реНрддреНрд░, рдЖрдореНрд╣реА рдЖрдордЪреА рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡реВ рд╢рдХрддреЛ:
import learn.codegym.Cat;

import java.lang.reflect.Field;

public class Main {

   public static Cat createCat()  {

       Class clazz = null;
       Cat cat = null;
       try {
           clazz = Class.forName("learn.codegym.Cat");
           cat = (Cat) clazz.newInstance();

           // We got lucky with the name field, since it has a setter
           cat.setName("Fluffy");

           Field age = clazz.getDeclaredField("age");

           age.setAccessible(true);

           age.set(cat, 6);

       } catch (IllegalAccessException e) {
           e.printStackTrace();
       } catch (InstantiationException e) {
           e.printStackTrace();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       } catch (NoSuchFieldException e) {
           e.printStackTrace();
       }

       return cat;
   }

   public static void main(String[] args) {
       System.out.println(createCat());
   }
}
рдЯрд┐рдкреНрдкрдгреНрдпрд╛рдВрдордзреНрдпреЗ рдореНрд╣рдЯрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ, рдлреАрд▓реНрдбрд╕рд╣ рд╕рд░реНрд╡рдХрд╛рд╣реА nameрд╕рд░рд│ рдЖрд╣реЗ, рдХрд╛рд░рдг рд╡рд░реНрдЧ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдиреА рд╕реЗрдЯрд░ рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЖрд╣реЗ. рдбреАрдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░рдордзреВрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдзреАрдЪ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ: рдЖрдордЪреНрдпрд╛рдХрдбреЗ newInstance()рдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ. рдкрдг рдЖрдореНрд╣рд╛рд▓рд╛ рджреБрд╕рд▒реНрдпрд╛ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдХрд╛рд╣реА рдлреЗрд░рдлрд╛рд░ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓. рдпреЗрдереЗ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рддреЗ рд╢реЛрдзреВрдпрд╛ :)
Field age = clazz.getDeclaredField("age");
рдпреЗрдереЗ, рдЖрдордЪреНрдпрд╛ Class clazzрдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдЖрдореНрд╣реА ageрдкрджреНрдзрддреАрджреНрд╡рд╛рд░реЗ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЛ getDeclaredField(). рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореНрд╣рдгреВрди рд╡рдп рдлреАрд▓реНрдб рдорд┐рд│рд╡реВ рджреЗрддреЗ Field age. рдкрд░рдВрддреБ рд╣реЗ рдкреБрд░реЗрд╕реЗ рдирд╛рд╣реА, рдХрд╛рд░рдг рдЖрдореНрд╣реА рдлреАрд▓реНрдбрд▓рд╛ рдлрдХреНрдд рдореВрд▓реНрдпреЗ рдирд┐рдпреБрдХреНрдд рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА private. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ setAccessible()рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рдлреАрд▓реНрдб рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рдмрдирд╡рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓:
age.setAccessible(true);
рдПрдХрджрд╛ рдЖрдореНрд╣реА рд╣реЗ рдлреАрд▓реНрдбрдордзреНрдпреЗ рдХреЗрд▓реЗ рдХреА, рдЖрдореНрд╣реА рдПрдХ рдореВрд▓реНрдп рдирд┐рдпреБрдХреНрдд рдХрд░реВ рд╢рдХрддреЛ:
age.set(cat, 6);
рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдЖрдордЪреНрдпрд╛ Field ageрдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рдЗрдирд╕рд╛рдИрдб-рдЖрдЙрдЯ рд╕реЗрдЯрд░ рдЖрд╣реЗ рдЬреНрдпрд╛рд▓рд╛ рдЖрдкрдг рдЗрдВрдЯ рд╡реНрд╣реЕрд▓реНрдпреВ рдкрд╛рд╕ рдХрд░рддреЛ рдЖрдгрд┐ рдЬреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрдЪреЗ рдлреАрд▓реНрдб рдирд┐рдпреБрдХреНрдд рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдЖрдордЪреА рдкрджреНрдзрдд рдЪрд╛рд▓рд╡рддреЛ main()рдЖрдгрд┐ рдкрд╛рд╣рддреЛ:
Cat{name='Fluffy', age=6}
рдЙрддреНрдХреГрд╖реНрдЯ! рдЖрдореНрд╣реА рддреЗ рдХреЗрд▓реЗ! :) рдмрдШреВ рдЕрдЬреВрди рдХрд╛рдп рдХрд░рддрд╛ рдпреЗрдИрд▓...

рдЙрджрд╛рд╣рд░рдг рдкрджреНрдзрддреАрд▓рд╛ рдирд╛рд╡рд╛рдиреЗ рдХрд╕реЗ рдХреЙрд▓ рдХрд░рд╛рд╡реЗ.

рдорд╛рдЧреАрд▓ рдЙрджрд╛рд╣рд░рдгрд╛рддреАрд▓ рдкрд░рд┐рд╕реНрдерд┐рддреА рдереЛрдбреА рдмрджрд▓реВрдпрд╛. рд╕рдордЬрд╛ рдХреА CatрдХреНрд▓рд╛рд╕ рдбреЗрд╡реНрд╣рд▓рдкрд░рдиреЗ рдЧреЗрдЯрд░реНрд╕ рдЖрдгрд┐ рд╕реЗрдЯрд░реНрд╕рд╕рд╣ рдЪреВрдХ рдХреЗрд▓реА рдирд╛рд╣реА. рддреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ. рдЖрддрд╛ рд╕рдорд╕реНрдпрд╛ рд╡реЗрдЧрд│реА рдЖрд╣реЗ: рдЖрдореНрд╣рд╛рд▓рд╛ рдирд┐рд╢реНрдЪрд┐рддрдкрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдПрдХ рдкрджреНрдзрдд рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╡рд┐рдХрд╕рдХрд╛рдиреЗ рддреА рдЦрд╛рдЬрдЧреА рдХреЗрд▓реА рдЖрд╣реЗ:
private void sayMeow() {

   System.out.println("Meow!");
}
рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЬрд░ рдЖрдкрдг рдЖрдкрд▓реНрдпрд╛ рдкреНрд░реЛрдЧреНрд░реЕрдордордзреНрдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХреЗрд▓реЗ , рддрд░ рдЖрдкрдг рддреНрдпрд╛рд╡рд░ рдкрджреНрдзрдд CatрдХреЙрд▓ рдХрд░реВ рд╢рдХрдгрд╛рд░ рдирд╛рд╣реА . sayMeow()рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдорд╛рдВрдЬрд░реА рдЕрд╕рддреАрд▓ рдЬреА рдореНрдпрд╛рдК рдХрд░рдд рдирд╛рд╣реАрдд? рд╣реЗ рд╡рд┐рдЪрд┐рддреНрд░ рдЖрд╣реЗ :/ рдЖрдореНрд╣реА рдпрд╛рдЪреЗ рдирд┐рд░рд╛рдХрд░рдг рдХрд╕реЗ рдХрд░реВ? рдкреБрдиреНрд╣рд╛ рдПрдХрджрд╛, рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди API рдЖрдореНрд╣рд╛рд▓рд╛ рдорджрдд рдХрд░рддреЗ! рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдЪреЗ рдирд╛рд╡ рдорд╛рд╣рд┐рдд рдЖрд╣реЗ. рдмрд╛рдХреА рд╕рд░реНрд╡ рдХрд╛рд╣реА рддрд╛рдВрддреНрд░рд┐рдХ рдЖрд╣реЗ:
import learn.codegym.Cat;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Main {

   public static void invokeSayMeowMethod()  {

       Class clazz = null;
       Cat cat = null;
       try {

           cat = new Cat("Fluffy", 6);

           clazz = Class.forName(Cat.class.getName());

           Method sayMeow = clazz.getDeclaredMethod("sayMeow");

           sayMeow.setAccessible(true);

           sayMeow.invoke(cat);

       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       } catch (NoSuchMethodException e) {
           e.printStackTrace();
       } catch (IllegalAccessException e) {
           e.printStackTrace();
       } catch (InvocationTargetException e) {
           e.printStackTrace();
       }
   }

   public static void main(String[] args) {
       invokeSayMeowMethod();
   }
}
рдЦрд╛рдЬрдЧреА рдХреНрд╖реЗрддреНрд░рд╛рдд рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣реА рдЬреЗ рдХрд╛рд╣реА рдХреЗрд▓реЗ рддреЗрдЪ рдЖрдореНрд╣реА рдпреЗрдереЗ рдХрд░рддреЛ. рдкреНрд░рдердо, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реА рдкрджреНрдзрдд рдорд┐рд│рддреЗ. рд╣реЗ рдПрдХрд╛ MethodрдСрдмреНрдЬреЗрдХреНрдЯрдордзреНрдпреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ:
Method sayMeow = clazz.getDeclaredMethod("sayMeow");
рдкрджреНрдзрдд getDeclaredMethod()рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЦрд╛рдЬрдЧреА рдкрджреНрдзрддреАрдВрдХрдбреЗ рдЬрд╛рдК рджреЗрддреЗ. рдкреБрдвреЗ, рдЖрдореНрд╣реА рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдмрдирд╡рддреЛ:
sayMeow.setAccessible(true);
рдЖрдгрд┐ рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рдЗрдЪреНрдЫрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рддреЛ:
sayMeow.invoke(cat);
рдпреЗрдереЗ, рдЖрдордЪрд╛ рдореЗрдердб рдХреЙрд▓ рд╣рд╛ "рдХреЙрд▓рдмреЕрдХ" рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ: рдЖрдореНрд╣рд╛рд▓рд╛ рдЗрдЪреНрдЫрд┐рдд рдкрджреНрдзрддреАрдХрдбреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рд▓рд╛рд╡рдзреА рд╡рд╛рдкрд░рдгреНрдпрд╛рдЪреА рд╕рд╡рдп рдЖрд╣реЗ ( cat.sayMeow()), рдкрд░рдВрддреБ рдкрд░рд╛рд╡рд░реНрддрдирд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдирд╛, рдЖрдореНрд╣реА рдЬреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╡рд░ рдХреЙрд▓ рдХрд░реВ рдЗрдЪреНрдЫрд┐рддреЛ рддреНрдпрд╛ рдкрджреНрдзрддреАрдХрдбреЗ рдЬрд╛рддреЛ. рддреА рдкрджреНрдзрдд. рдЖрдордЪреНрдпрд╛ рдХрдиреНрд╕реЛрд▓рд╡рд░ рдХрд╛рдп рдЖрд╣реЗ?
Meow!
рд╕рд░реНрд╡ рдХрд╛рд╣реА рдХрд╛рдо рдХреЗрд▓реЗ! :) рдЖрддрд╛ рддреБрдореНрд╣реА рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдордиреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЕрдлрд╛рдЯ рд╢рдХреНрдпрддрд╛ рдкрд╛рд╣реВ рд╢рдХрддрд╛. рдХрдареАрдг рдЖрдгрд┐ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддреАрдд (рдЬрд╕реЗ рдХреА рдмрдВрдж рд▓рд╛рдпрдмреНрд░рд░реАрддреАрд▓ рд╡рд░реНрдЧрд╛рддреАрд▓ рдЖрдордЪреА рдЙрджрд╛рд╣рд░рдгреЗ), рддреЗ рдЦрд░реЛрдЦрд░рдЪ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦреВрдк рдорджрдд рдХрд░реВ рд╢рдХрддреЗ. рдкрд░рдВрддреБ, рдХреЛрдгрддреНрдпрд╛рд╣реА рдорд╣рд╛рди рд╢рдХреНрддреАрдкреНрд░рдорд╛рдгреЗ, рддреА рдореЛрдареА рдЬрдмрд╛рдмрджрд╛рд░реА рдЖрдгрддреЗ. рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреЗ рддреЛрдЯреЗ рдУрд░реЕрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдПрдХрд╛ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рднрд╛рдЧрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рддреАрди рдореБрдЦреНрдп рддреЛрдЯреЗ рдЖрд╣реЗрдд:
  1. рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдИрдЯ рдЖрд╣реЗ. рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреА рдХрд╛рдордЧрд┐рд░реА рд╕рд╛рдорд╛рдиреНрдп рдкрджреНрдзрддреАрдиреЗ рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреЗрдХреНрд╖рд╛ рд╡рд╛рдИрдЯ рдЕрд╕рддреЗ.

  2. рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рд░реНрдмрдВрдз рдЖрд╣реЗрдд. рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдо рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд░рдирдЯрд╛рдЗрдордЪреНрдпрд╛ рд╡реЗрд│реА рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреЗ рд╡рд░реНрддрди рдмрджрд▓реВ рджреЗрддреЗ. рдкрд░рдВрддреБ рддреБрдордЪреНрдпрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рдард┐рдХрд╛рдгреА, рдПрдЦрд╛рджреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд░реНрдпрд╛рджрд╛рдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреВ рд╢рдХрддреЛ рдЬреНрдпрд╛ рдпрд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛрдирд╛рд╣реАрдд.

  3. рдЕрдВрддрд░реНрдЧрдд рдорд╛рд╣рд┐рддреА рдЙрдШрдб рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдзреЛрдХрд╛. рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реЗ рдПрдиреНрдХреЕрдкреНрд╕реБрд▓реЗрд╢рдирдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдЪреЗ рдереЗрдЯ рдЙрд▓реНрд▓рдВрдШрди рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рдЬрдЧреА рдлреАрд▓реНрдб, рдкрджреНрдзрддреА рдЗрддреНрдпрд╛рджреАрдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рджреЗрддреЗ. рдорд▓рд╛ рдирд╛рд╣реА рд╡рд╛рдЯрдд рдХреА OOP рдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдВрдЪреЗ рдереЗрдЯ рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рдЙрд▓реНрд▓рдВрдШрди рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдХреЗрд╡рд│ рдЕрддреНрдпрдВрдд рдЕрддреНрдпрдВрдд рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдЬреЗрд╡реНрд╣рд╛ рддреБрдордЪреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдгрд╛рдмрд╛рд╣реЗрд░реАрд▓ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рдЪреЗ рдЗрддрд░ рдХреЛрдгрддреЗрд╣реА рдорд╛рд░реНрдЧ рдирд╕рддрд╛рдд.

рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╕реБрдЬреНрдЮрдкрдгреЗ рд╡рд╛рдкрд░рд╛ рдЖрдгрд┐ рдХреЗрд╡рд│ рдЕрд╢рд╛ рдкрд░рд┐рд╕реНрдерд┐рддреАрддрдЪ рд╡рд╛рдкрд░рд╛ рдЬрд┐рдереЗ рддреЗ рдЯрд╛рд│рддрд╛ рдпреЗрдд рдирд╛рд╣реА рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдХрдорддрд░рддрд╛рдВрдмрджреНрджрд▓ рд╡рд┐рд╕рд░реВ рдирдХрд╛. рдпрд╛рд╕рд╣ рдЖрдордЪрд╛ рдзрдбрд╛ рд╕рдВрдкрд▓рд╛ рдЖрд╣реЗ. рддреЗ рдЦреВрдк рд▓рд╛рдВрдм рдирд┐рдШрд╛рд▓реЗ, рдкрд░рдВрддреБ рдЖрдЬ рдЖрдкрдг рдмрд░реЗрдЪ рдХрд╛рд╣реА рд╢рд┐рдХрд▓рд╛рдд :)
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд