How do Java method annotations work in conjunction with method overriding?

后端 未结 4 1406
清酒与你
清酒与你 2020-11-28 06:39

I have a parent class Parent and a child class Child, defined thus:

class Parent {
    @MyAnnotation("hello")
    void foo         


        
4条回答
  •  一向
    一向 (楼主)
    2020-11-28 07:02

    Copied verbatim from http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations.html#annotation-inheritance:

    Annotation Inheritance

    It is important to understand the rules relating to inheritance of annotations, as these have a bearing on join point matching based on the presence or absence of annotations.

    By default annotations are not inherited. Given the following program

            @MyAnnotation
            class Super {
              @Oneway public void foo() {}
            }
    
            class Sub extends Super {
              public void foo() {}
            }
    

    Then Sub does not have the MyAnnotation annotation, and Sub.foo() is not an @Oneway method, despite the fact that it overrides Super.foo() which is.

    If an annotation type has the meta-annotation @Inherited then an annotation of that type on a class will cause the annotation to be inherited by sub-classes. So, in the example above, if the MyAnnotation type had the @Inherited attribute, then Sub would have the MyAnnotation annotation.

    @Inherited annotations are not inherited when used to annotate anything other than a type. A type that implements one or more interfaces never inherits any annotations from the interfaces it implements.

提交回复
热议问题