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 рд╕рд╣ рддреБрдореНрд╣реА рдХрд░реВ рд╢рдХрддрд╛ рдЕрд╢рд╛ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдпрд╛рджреА рдпреЗрдереЗ рдЖрд╣реЗ:
- рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдУрд│рдЦрд╛/рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рд╛.
- рд╡рд░реНрдЧ рд╕реБрдзрд╛рд░рдХ, рдлреАрд▓реНрдб, рдкрджреНрдзрддреА, рд╕реНрдерд┐рд░рд╛рдВрдХ, рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЖрдгрд┐ рд╕реБрдкрд░рдХреНрд▓рд╛рд╕ рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рд╛.
- рдЕрдВрдорд▓рд╛рдд рдЖрдгрд▓реЗрд▓реНрдпрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛ рдкрджреНрдзрддреА рдЖрд╣реЗрдд рддреЗ рд╢реЛрдзрд╛.
- рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрдИрдкрд░реНрдпрдВрдд рдЬреНрдпрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рдорд╛рд╣рд┐рдд рдирд╛рд╣реА рдЕрд╢рд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рд╛.
- рдирд╛рд╡рд╛рдиреЗ рдЙрджрд╛рд╣рд░рдг рдлреАрд▓реНрдбрдЪреЗ рдореВрд▓реНрдп рдорд┐рд│рд╡рд╛ рдЖрдгрд┐ рд╕реЗрдЯ рдХрд░рд╛.
- рдирд╛рд╡рд╛рдиреЗ рдЙрджрд╛рд╣рд░рдг рдкрджреНрдзрдд рдХреЙрд▓ рдХрд░рд╛.
рдСрдмреНрдЬреЗрдХреНрдЯрдЪрд╛ рд╡рд░реНрдЧ рдХрд╕рд╛ рдУрд│рдЦрд╛рдпрдЪрд╛/рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рд╛рдпрдЪрд╛
рдЪрд▓рд╛ рдореВрд▓рднреВрдд рдЧреЛрд╖реНрдЯреАрдВрд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛. рдЬрд╛рд╡рд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдЗрдВрдЬрд┐рдирдЪрд╛ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рд╣рд╛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
. рдпреЗрдереЗ рдЖрдкрдг рдПрдХрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдирд╛рд╡ рд╡рд╛рдЪрддреЛ рдЬреНрдпрд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдг рдХрдиреНрд╕реЛрд▓рдордзреВрди рддрдпрд╛рд░ рдХрд░реВ. рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреНрдпрд╛ рд╡рд░реНрдЧрд╛рдЪреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪреЗ рдЖрд╣реЗ рддреНрдпрд╛рдЪреЗ рдирд╛рд╡ рдУрд│рдЦрддреЛ. рд╕рдВрдХреНрд╖рд┐рдкреНрддрддреЗрд╕рд╛рдареА, рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдЕрдкрд╡рд╛рдж рд╣рд╛рддрд╛рд│рдгреА рдХреЛрдб рд╡рдЧрд│рд▓рд╛, рдЬреЛ рдЙрджрд╛рд╣рд░рдгрд╛рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЬрд╛рдЧрд╛ рдШреЗрдИрд▓. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ, рдЕрд░реНрдерд╛рддрдЪ, рддреБрдореНрд╣реА рдЪреБрдХреАрдЪреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реА рдирд╛рд╡реЗ рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рд╣рд╛рддрд╛рд│рд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд. рдбреАрдлреЙрд▓реНрдЯ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рдкрд╛рд╣реВ рд╢рдХрддрд╛, рд╡рд░реНрдЧрд╛рдЪрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ :) рдкрджреНрдзрдд 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!
рд╕рд░реНрд╡ рдХрд╛рд╣реА рдХрд╛рдо рдХреЗрд▓реЗ! :) рдЖрддрд╛ рддреБрдореНрд╣реА рдЬрд╛рд╡рд╛рдЪреНрдпрд╛ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдордиреЗ рджрд┐рд▓реЗрд▓реНрдпрд╛ рдЕрдлрд╛рдЯ рд╢рдХреНрдпрддрд╛ рдкрд╛рд╣реВ рд╢рдХрддрд╛. рдХрдареАрдг рдЖрдгрд┐ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддреАрдд (рдЬрд╕реЗ рдХреА рдмрдВрдж рд▓рд╛рдпрдмреНрд░рд░реАрддреАрд▓ рд╡рд░реНрдЧрд╛рддреАрд▓ рдЖрдордЪреА рдЙрджрд╛рд╣рд░рдгреЗ), рддреЗ рдЦрд░реЛрдЦрд░рдЪ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦреВрдк рдорджрдд рдХрд░реВ рд╢рдХрддреЗ. рдкрд░рдВрддреБ, рдХреЛрдгрддреНрдпрд╛рд╣реА рдорд╣рд╛рди рд╢рдХреНрддреАрдкреНрд░рдорд╛рдгреЗ, рддреА рдореЛрдареА рдЬрдмрд╛рдмрджрд╛рд░реА рдЖрдгрддреЗ. рдкрд░рд╛рд╡рд░реНрддрдирд╛рдЪреЗ рддреЛрдЯреЗ рдУрд░реЕрдХрд▓ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░реАрд▓ рдПрдХрд╛ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рднрд╛рдЧрд╛рдд рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рддреАрди рдореБрдЦреНрдп рддреЛрдЯреЗ рдЖрд╣реЗрдд:
-
рдХрд╛рдордЧрд┐рд░реА рд╡рд╛рдИрдЯ рдЖрд╣реЗ. рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдЪреА рдХрд╛рдордЧрд┐рд░реА рд╕рд╛рдорд╛рдиреНрдп рдкрджреНрдзрддреАрдиреЗ рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреАрдВрдкреЗрдХреНрд╖рд╛ рд╡рд╛рдИрдЯ рдЕрд╕рддреЗ.
-
рд╕реБрд░рдХреНрд╖рд╛ рдирд┐рд░реНрдмрдВрдз рдЖрд╣реЗрдд. рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдореЗрдХреЕрдирд┐рдЭрдо рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд░рдирдЯрд╛рдЗрдордЪреНрдпрд╛ рд╡реЗрд│реА рдкреНрд░реЛрдЧреНрд░рд╛рдордЪреЗ рд╡рд░реНрддрди рдмрджрд▓реВ рджреЗрддреЗ. рдкрд░рдВрддреБ рддреБрдордЪреНрдпрд╛ рдХрд╛рдорд╛рдЪреНрдпрд╛ рдард┐рдХрд╛рдгреА, рдПрдЦрд╛рджреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд▓реНрдкрд╛рд╡рд░ рдХрд╛рдо рдХрд░рддрд╛рдирд╛, рддреБрдореНрд╣рд╛рд▓рд╛ рдорд░реНрдпрд╛рджрд╛рдВрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧреВ рд╢рдХрддреЛ рдЬреНрдпрд╛ рдпрд╛рд╕ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд тАЛтАЛрдирд╛рд╣реАрдд.
-
рдЕрдВрддрд░реНрдЧрдд рдорд╛рд╣рд┐рддреА рдЙрдШрдб рд╣реЛрдгреНрдпрд╛рдЪрд╛ рдзреЛрдХрд╛. рдкреНрд░рддрд┐рдмрд┐рдВрдм рд╣реЗ рдПрдиреНрдХреЕрдкреНрд╕реБрд▓реЗрд╢рдирдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдЪреЗ рдереЗрдЯ рдЙрд▓реНрд▓рдВрдШрди рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ: рддреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рдЬрдЧреА рдлреАрд▓реНрдб, рдкрджреНрдзрддреА рдЗрддреНрдпрд╛рджреАрдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рджреЗрддреЗ. рдорд▓рд╛ рдирд╛рд╣реА рд╡рд╛рдЯрдд рдХреА OOP рдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рдВрдЪреЗ рдереЗрдЯ рдЖрдгрд┐ рд╕реНрдкрд╖реНрдЯ рдЙрд▓реНрд▓рдВрдШрди рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ. рдХреЗрд╡рд│ рдЕрддреНрдпрдВрдд рдЕрддреНрдпрдВрдд рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдЬреЗрд╡реНрд╣рд╛ рддреБрдордЪреНрдпрд╛ рдирд┐рдпрдВрддреНрд░рдгрд╛рдмрд╛рд╣реЗрд░реАрд▓ рдХрд╛рд░рдгрд╛рдВрдореБрд│реЗ рд╕рдорд╕реНрдпрд╛ рд╕реЛрдбрд╡рдгреНрдпрд╛рдЪреЗ рдЗрддрд░ рдХреЛрдгрддреЗрд╣реА рдорд╛рд░реНрдЧ рдирд╕рддрд╛рдд.