首先,定义注解。注解是不干活的,干活的只是获取注解的方法,如反射:
package Java201512; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * MyOverride : * @author xuejupo [email protected] * create in 2015-12-12 上午9:05:12 */ @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MyOverride { }
获取注解并分析:
package Java201512; import java.lang.reflect.Method; /** * MyOverrideTest : * @author xuejupo [email protected] * create in 2015-12-12 上午9:06:43 */ public class MyOverrideTest { public static void main(String[] s) throws ClassNotFoundException{ Class myClass = childClass.class; //获取类的所有方法 Method[] methods = myClass.getMethods(); Class mySuperClass = myClass.getSuperclass(); //遍历类的所有方法 for(Method method:methods){ //如果该类有MyOverride注解 if(method.isAnnotationPresent(MyOverride.class)){ Class<?>[] types = method.getParameterTypes(); try { Method m = mySuperClass.getMethod(method.getName(), types); if(m == null){ System.out.println("方法"+method.getName()+"不合法"); } } catch (SecurityException e) { System.out.println("方法"+method.getName()+"不合法,您无法继承父类同方法"); // TODO Auto-generated catch block } catch (NoSuchMethodException e) { // TODO Auto-generated catch block System.out.println("方法"+method.getName()+"不合法,用了override,但是父类无此方法"); } } } } } class superClass{ public void myOverrideTest(){ } } class childClass extends superClass{ @MyOverride public void myOverrideTest(){ } @MyOverride public void myOverrideTest(int i){ } @MyOverride public void myOverrideTestNotFound(){ } }
简单得实现一下override.
结果:
方法myOverrideTest不合法,用了override,但是父类无此方法 方法myOverrideTestNotFound不合法,用了override,但是父类无此方法