啥也不说,直接上代码。
//性别枚举
public enum Sex
{
Man, Woman;
}
//抽象基类
public abstract class Person
{
//定义人的基本属性,姓名 + 性别
public String name;
public Sex sex;
}
//定义Lily
public class Lily extends Person
{
//Lily,对女孩来说,年龄、体重、外号都是秘密
private int age = 20;
private int weight = 52;
private String alia = "Little fox";
public Lily()
{
this.name = "Lily";
this.sex = Sex.Woman;
}
/**
* 基本信息,访问权限 - 公共
*
* @return
*/
public String getBasicInfo()
{
return "Name:" + name + ", Sex:" + sex.toString();
}
/**
* 扩展信息,访问权限 - 私有
*
* @return
*/
private String getExpandInfo()
{
return "Age:" + age + ", " + "Weight:" + weight + "kg, " + "Alia:" + alia;
}
}
//某人类
public class Someone extends Person
{
private Someone(String name, Sex sex)
{
this.name = name;
this.sex = sex;
}
private void setFavouriteSports(String favouriteSports)
{
System.out.print(name + " favourite sports is " + favouriteSports);
}
}
引用类
public class Reflection
{
public static void main(String args[]) throws Exception
{
//反射的基本使用一, 常用反射写法一
Class cls = Lily.class;
Object object = cls.newInstance();
//常量的反射
Field age = cls.getDeclaredField("age");
age.setAccessible(true);
Field weight = cls.getDeclaredField("weight");
weight.setAccessible(true);
Field alia = cls.getDeclaredField("alia");
alia.setAccessible(true);
System.out.println("age == " + age.get(object));
System.out.println("weight == " + weight.get(object));
System.out.println("alia == " + alia.get(object));
//基本信息获取
Lily lily = new Lily();
System.out.println("basicInfo == " + lily.getBasicInfo());
//私有方法的反射
Method method = cls.getDeclaredMethod("getExpandInfo", null);
method.setAccessible(true);
System.out.println("ExpandInfo == " + method.invoke(object, null));
//反射的基本使用二, 常用反射写法二
Class cs = Class.forName("com.sample.Someone");
Constructor<Someone> constructor = cs.getDeclaredConstructor(String.class, Sex.class);
constructor.setAccessible(true);
//利用反射,调用私有构造器
Someone someone = constructor.newInstance("Junhui", Sex.Man);
Class someClass = someone.getClass();
Method setFav = someClass.getDeclaredMethod("setFavouriteSports", String.class);
setFav.setAccessible(true);
setFav.invoke(someone, "basketball");
}
}