通过反射机制体会接口和枚举

124 阅读1分钟

public  class Interface_Test1 {

//Modifier 里通过二进制的位来表示是否包含某个修饰符
//    final static protected private public
//    0        1    0           0       1
//public static      : 1001 =9
//public static final: 11001=25

    public static void main(String[] args) {
        System.out.println("===========验证接口===========");
        Method[] methods = Milk.class.getDeclaredMethods();
        for (Method method : methods) {
//            TODO 1.验证接口中方法默认是public abstract的
            System.out.println(method.getName()+"的修饰符为:"+Modifier.toString(method.getModifiers()));
        }

        Field[] fields = Milk.class.getDeclaredFields();
        for (Field field : fields) {
//            TODO 2.验证接口中属性默认是public static final的
            System.out.println(field.getName()+"的修饰符为:"+Modifier.toString(field.getModifiers()));
        }

        System.out.println("===========验证枚举===========");
        Constructor<?>[] constructors = Every.class.getDeclaredConstructors();
        for (Constructor<?> constructor : constructors) {
//             TODO 3.验证枚举中构造器默认是private的
            System.out.println(constructor.getName()+"的修饰符为:"+Modifier.toString(constructor.getModifiers()));
        }

        Field[] fields1 = Every.class.getDeclaredFields();
        for (Field field : fields1) {
//            TODO 4.验证枚举中实例默认是public static final的.属性最好显式的声明为private final的
            System.out.println(field.getName()+"的修饰符为:"+Modifier.toString(field.getModifiers()));
        }
    }
}

/**
 * 定义一个接口,设计接口的成员:属性,抽象方法,默认方法,静态方法
 */
interface Milk {
    int date = 7;
    String capacity = "250ml";

    void drink();

    default void getColor() {
        System.out.println("保质期为:" + date + "天");
    }

    static void getCapacity() {
        System.out.println("每天喝" +capacity+ "的牛奶");
    }
}

/**
 * 定义一个枚举,设计枚举的成员:实例,属性,构造器,getXxx(),toString(可选)
 * attention:先写实例,再写属性
 */
enum Every{

//    win in missing 5 hours!!!
    DAY("work",12),
    NIGHT("sleep",7);

    String status;
    private final int hour;
    Every(String status,int hour) {
        this.status = status;
        this.hour=hour;
    }

    public String getStatus() {
        return status;
    }

    public int getHour() {
        return hour;
    }

    @Override
    public String toString() {
        return "Every{" +
                "status='" + status + '\'' +
                ", hour=" + hour +
                '}';
    }
}