I am not getting the @Inherited
annotation in Java. If it automatically inherits the methods for you then if I need to implement the method in my own way then what about that ?
How does will it come to know my way of implementation ?
Plus it is said if I do not want to use this and do it rather in an old fashioned Java way I have to implement the the equals()
, toString()
, and the hashCode()
methods of the Object
class and also the annotation type method of the java.lang.annotation.Annotation
class.
Why is that?
I have never implemented those even when I did not know about the @Inherited
annotation and the programs used to work fine also .
Please somebody explain me from the scratch about this.
@inherited is a type of meta-annotation used to annotate custom annotations so that the subclass can inherit those custom annotations.
Annotation Type Inherited If an Inherited meta-annotation is present on an annotation type declaration, and the user queries the annotation type on a class declaration, and the class declaration has no annotation for this type, then the class's superclass will automatically be queried for the annotation type.
Because there is no multiple inheritance in Java, annotations on interfaces cannot be inherited. Even when the annotation is inherited, the application code that retrieves the annotation of a certain element can distinguish between the annotations that are inherited and those that are declared on the entity itself.
@Override @Override annotation informs the compiler that the element is meant to override an element declared in a superclass. Overriding methods will be discussed in Interfaces and Inheritance. While it is not required to use this annotation when overriding a method, it helps to prevent errors.
Just that there is no misunderstanding: You do ask about java.lang.annotation.Inherited. This is a annotation for annotations.It means that subclasses of annotated classes are considered having the same annotation as their superclass.
Consider the following 2 Annotations:
@Inherited @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface InheritedAnnotationType { }
and
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface UninheritedAnnotationType { }
If three classes are annotated like this:
@UninheritedAnnotationType class A { } @InheritedAnnotationType class B extends A { } class C extends B { }
running this code
System.out.println(new A().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println(new B().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println(new C().getClass().getAnnotation(InheritedAnnotationType.class)); System.out.println("_________________________________"); System.out.println(new A().getClass().getAnnotation(UninheritedAnnotationType.class)); System.out.println(new B().getClass().getAnnotation(UninheritedAnnotationType.class)); System.out.println(new C().getClass().getAnnotation(UninheritedAnnotationType.class));
will print a result similar to this (depending on the packages of the annotation):
null @InheritedAnnotationType() @InheritedAnnotationType() _________________________________ @UninheritedAnnotationType() null null
As you can see UninheritedAnnotationType
is not inherited but C
inherits annotation InheritedAnnotationType
from B
.
I don't know what methods have to do with that.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With